乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android NDK系列(五)

       instl 2018-09-25

      NDK系列(一)-AS使用javah生成so文件
      NDK系列(二)-AS使用CmakeLists生成so文件
      NDK系列(三)-AS編寫C文件沒有提示和不識別NULL
      NDK系列(四)-AS生成jar包、導(dǎo)入so庫并使用方法

      接著搗鼓ndk,我們在開發(fā)的時候,不可避免的需要使用一些三方庫,提高自己的開發(fā)效率,同時也可以避免自己在某一方面的缺點和短板,這是我們在做安卓原生開發(fā)的套路,那么ndk開發(fā)呢,也是同樣如此,需要導(dǎo)入一些so文件的三方庫,來方便我們的開發(fā)。以NDK系列一、二的兩個demo為例子,比如我們需要那個so文件的方法,在系列一的demo jnilibarary的C文件中添加一個add方法,我們想要在系列二的C文件中調(diào)用這個方法(假設(shè)這個方法邏輯很復(fù)雜,重寫需要很浪費時間或者你不會這方面的知識,需要三方庫來補充),那么就需要把系列一生成的C文件導(dǎo)入系列二的項目中(后面我會把項目放在git上,需要的自己去down)

      第一步:生成一個三方so庫

      這里寫圖片描述

      在main.c的文件中添加一個add方法,傳入兩個參數(shù),返回他們的和。其他的不需要修改什么,直接生成so文件就Ok了,至于怎么生成so文件,請參考系列一的介紹。

      這里寫圖片描述

      這里需要額外注意的是,要記住生成的so庫的名字,也就是gradle ndk 設(shè)置的那個名字。

      這里寫圖片描述

      第二步:導(dǎo)入三方so庫

      上個文章我導(dǎo)入so庫放在默認目錄jniLibs下的,這次我放在libs文件下,做個對比。
      在gradle中加入

       sourceSets.main{
              jniLibs.srcDirs = ['libs']
              jni.srcDirs = []
          }
      • 1
      • 2
      • 3
      • 4

      這里寫圖片描述
      把三方的so庫放在libs的目錄下。接下來編寫CmakeList.txt文件,這個比較麻煩了。
      我先把我的文件展示出來,在解釋。

      # Sets the minimum version of CMake required to build the native
      # library. You should either keep the default value or only pass a
      # value of 3.4.0 or lower.
      
      cmake_minimum_required(VERSION 3.4.1)
      
      # Creates and names a library, sets it as either STATIC
      # or SHARED, and provides the relative paths to its source code.
      # You can define multiple libraries, and CMake builds it for you.
      # Gradle automatically packages shared libraries with your APK.
      
      #設(shè)置生成的so動態(tài)庫最后輸出的路徑
      #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
      find_library(
                    log-lib
                    log )
      #設(shè)置so庫
      set(my_lib_path ${CMAKE_SOURCE_DIR}/libs)
      add_library( nativeUtil
                   SHARED
                   IMPORTED )
      set_target_properties( nativeUtil
                             PROPERTIES IMPORTED_LOCATION
                             ${my_lib_path}/${ANDROID_ABI}/libnativeUtil.so )
      add_library(
                   native-lib
                   SHARED
                   src/main/cpp/native-lib.c )
      target_link_libraries(
                              native-lib
                             nativeUtil
                             ${log-lib} )
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32

      1、set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})這句被我注釋了,是用來設(shè)置生成so文件的路徑。我設(shè)置生成的so文件放在了jniLibs下。如果不設(shè)置,是有一個默認的路徑的。文件夾名是cmake開頭。

      這里寫圖片描述

      默認位置在圖示這個位置。

      2、find_library( log-lib log )這個是Camakelist項目生成時默認導(dǎo)入的打印三方庫。

      3、set(my_lib_path ${CMAKE_SOURCE_DIR}/libs)這個是為了下面使用方便,設(shè)置了一個參數(shù),my_lib_path代表的是我當前Cmakelist所在根目錄下的libs這個文件夾。

      4、add_library( nativeUtil SHARED IMPORTED ) 添加名為nativeUtil的三方庫,這個名字就是我們生成so文件時設(shè)置的名字。

      5、set_target_properties( nativeUtil PROPERTIES IMPORTED_LOCATION ${my_lib_path}/${ANDROID_ABI}/libnativeUtil.so ) 設(shè)置nativeUtil庫的連接位置,在CmakeList根目錄的libs文件夾下的所有android abi平臺的名叫l(wèi)ibnativeUtil.so的文件。全部連接入項目。

      6、add_library( native-lib SHARED src/main/cpp/native-lib.c )這個是創(chuàng)建項目時自動生成的,該項目的so庫取名為native-lib,當然也可以換成其他的名字,注意不要與導(dǎo)入三方庫重名。后面的是該項目對應(yīng)的c文件位置。

      7、target_link_libraries( native-lib nativeUtil ${log-lib} ) 開始鏈接庫,這里有個著重注意的點,就是放在第一個的庫名稱必須是當前的庫名稱,也就是native-lib,不能將nativeUtil放在前面。

      第三步:使用so庫C方法

      手動創(chuàng)建一個h文件,extern 做前綴,extern意思是從別的庫導(dǎo)入的方法。

      extern int add(int a,int b);
      • 1

      這里寫圖片描述

      接下來就是,編寫當前項目的C文件。

      這里寫圖片描述

      將頭文件直接導(dǎo)入C文件,然后在MainActivity創(chuàng)建一個jni方法,在MainActivity導(dǎo)入兩個庫,調(diào)用方法就ok了。

      這里寫圖片描述

      點擊運行,就ok了。

      這里寫圖片描述

      好啦,這就是使用別人的so文件,編寫自己的so文件。踩坑踩著踩著就成長了,哈哈~~

      系列一javah創(chuàng)建的demo git:https://github.com/SingleShu/JniJavahTest

      系列二cmakelist創(chuàng)建的git : https://github.com/SingleShu/JniCmakeTest

      感謝動腦學(xué)院NDK專題資源

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多