1. 程式人生 > >(三)NDK 開發之生成並呼叫 so庫

(三)NDK 開發之生成並呼叫 so庫

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!