(三)NDK 開發之生成並呼叫 so庫
阿新 • • 發佈:2018-11-06
1、生成so 庫。
新建一個專案,勾選 Include C++ support.然後一直next。
在配置好NDK 的情況下,系統會直接生成一個呼叫C++ 的 例子,直接執行就可以。
配置NDK:https://blog.csdn.net/lijia1201900857/article/details/83576840
下面我們要生成 so 庫。詳細請看:https://blog.csdn.net/lijia1201900857/article/details/83615409
在CMakeList.txt 中新增如下程式碼:
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
編譯執行後,會在jniLibs 中生成相應 abi 的so 庫
到此我們就可以使用這些庫,供其他專案呼叫了。
二、呼叫so 庫
新建任意一個專案,Include c++ support 勾不勾無所謂。這裡我不勾選
分4步:
1、複製so庫拷貝到新專案的libs 目錄下
2、app 下的 build.gradle 中新增 連結so庫的配置
3、建立和 so中 程式碼相同包名+ 類名 的類
4、呼叫
1、將上個專案中生成的 so庫 複製到 libs 目錄下:
2、app 下的 build.gradle 中新增配置
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
總體結構如下:
3、建立和so中的程式碼相同包名+類名的類
我們上個專案native 方法 所屬的包名 為 com.example.com.jni , 類名為 MainActivity
所以我們需要在新專案中也新增這樣一個 類:
新建的MainActivity 類中 新增如下程式碼(和so庫中的呼叫程式碼一致):
static {
System.loadLibrary("native-lib");
}
public native String stringFromJNI();
4、呼叫
然後在新專案的MainActivity.class 中呼叫
執行結果如下:
over!