天天看點

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

本篇文章代碼一步一步實作打包so并使用:

  • 下載下傳NDK
  • 配置NDK環境變量
  • 建立工程開始JNI編寫
  • 指令行編譯JNI
  • 配置gradle打包到指定目錄
  • 導出So檔案使用

一、下載下傳NDK

  • 進入設定頁面
Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)
  • 下載下傳NDK,此處是我已經下載下傳過後自動配置好路徑了,如果沒下載下傳過,紅色方框會有download ndk ,點選下載下傳即可
Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

二、配置NDK

如圖在系統環境變量path中添加以下路徑:

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

測試配置:打開Android studio ,在整個工程的gradle.properties檔案中添加droid.useDeprecatedNdk=true

打開終端,輸入ndk-build回車,若有資訊輸出則配置成功

三、建立Library Module,穿件Jni本地代碼并實作功能方法之是以穿件Library Module是應為我們不僅要編譯出so,同時要導出使用so配套的api,将這些api導出成jar包提供給使用者使用,詳細見下文。

在nativeif建立兩個本地功能的類(先忽略api,這是打包so後使用so的api)

NativeTest 代表一個子產品的本地方法類,NativeCalculate代表另一個功能子產品的本地方法類,在此以加法功能子產品舉例

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

build本module,看看是否存在以下目錄

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

打開終端,定位到你module的src\main目錄,執行指令如下

javah -d jni -classpath C:\FrostySpace\Work\SDK\platforms\android-25\android.jar;….\build\intermediates\classes\debug com.winshare.cloud.jnilibrary.nativeif.NativeCalculate

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

說明:javah是jdk工具,請事先配置好環境變量。-d jni代表輸出目錄jni;一個android.jar替換成你的sdk下版本路徑,記得有“;”後面則是build後生成的本地class路徑最後隻寫類名,不用.class字尾,

回車後會自動生成jni目錄,裡面包含一個以下劃線代替包名點和類名方法名的對應頭檔案

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

建立c檔案,用c語言實作add的方法

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

四、将JNI代碼打包成SO庫

在jni目錄下建立Application.mk和Android.mk檔案。Application.mk内容如下:

這裡主要是APP_ABI值 armeabi-v7a支援性好,如果多個可疑後面空格繼續添加其他平台,輸出so也将是多個平台的so。

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

Android.mk内容如下:

1處代表so到處名稱,2處事要編譯打包的c原檔案,多個檔案用“\”分開。其他内容照寫即可。

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

準本好這些後,在終端(還是在src\main\)目錄下輸入”ndk-build” ,即可打包出so(注意打包出來會在你配置的名稱前自動加上lib,我們不用管,使用的時候也不要把lib去掉)。此時會在main目錄下生成libs和obj目錄,我們用libs目錄下對應平台的so即可。如圖:

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

五、提供對接SO庫的api,封裝成jar,使用者就可以友善的通過我們提供的api調用so中方法。

在同一mudule中編寫api并導出jar,目的是同意api和so庫中的方法名稱(即通過報名下劃線命名),api通路so才不會出現找不到對應方法的錯誤,我們将libs下的armeabi-v7a整體備份。

我們可以删除剛剛工程中打包so過程中産生的lib錄

删除後的目錄如下,并在api包中建立對應功能類,調用so中方法

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)
建立NativeAPP初始化加載so庫檔案,記得名稱不要寫so前面的lib
Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

六、将api到出位jar包,具體到處配置見工程源碼gradle,如圖點選JniLibrary編譯下的other子產品下面的makeJar生成jar在對應目錄(jarGenerated)。

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

makJar生成包:

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

七、使用api和對應的so。

建立測試module,将第六步到處的jar放在module的libs目錄,将第四步備份的so放在module的java同級目錄jniLibs(自己建立)下即可,如圖:

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

代碼中使用如下:

在使用提前加載so庫檔案,其他地方使用即可:

Android Studio 手把手教你NDK打包SO庫檔案,并提供對應API 使用它(賦demo)Android Studio 手把手教你利用NDK打包SO庫檔案,并提供對應API (封裝Jar包)使用它(附demo)

結束語:源碼點此下載下傳

有時間的話能一步一步走一遍最好,有問題可留言,多謝!

繼續閱讀