(三)NDK 开发之生成并调用 so库

1、生成so 库。

新建一个项目,勾选 Include C++ support.然后一直next。

(三)NDK 开发之生成并调用 so库_第1张图片

在配置好NDK 的情况下,系统会直接生成一个调用C++ 的 例子,直接运行就可以。

配置NDK:https://blog.csdn.net/lijia1201900857/article/details/83576840

 

(三)NDK 开发之生成并调用 so库_第2张图片

下面我们要生成 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 库

(三)NDK 开发之生成并调用 so库_第3张图片

到此我们就可以使用这些库,供其他项目调用了。

二、调用so 库

新建任意一个项目,Include c++ support  勾不勾无所谓。这里我不勾选

(三)NDK 开发之生成并调用 so库_第4张图片

 

分4步:

1、复制so库拷贝到新项目的libs 目录下

2、app 下的 build.gradle 中添加 链接so库的配置

3、创建和 so中 代码相同包名+ 类名 的类

4、调用

1、将上个项目中生成的 so库 复制到 libs 目录下:

 

(三)NDK 开发之生成并调用 so库_第5张图片

 

2、app 下的 build.gradle 中添加配置 

    sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }

总体结构如下:

(三)NDK 开发之生成并调用 so库_第6张图片

3、创建和so中的代码相同包名+类名的类

我们上个项目native 方法 所属的包名 为  com.example.com.jni  , 类名为 MainActivity

所以我们需要在新项目中也添加这样一个 类:

(三)NDK 开发之生成并调用 so库_第7张图片

新建的MainActivity 类中 添加如下代码(和so库中的调用代码一致):

   static {
        System.loadLibrary("native-lib");
    }

    public native String stringFromJNI();

4、调用

然后在新项目的MainActivity.class 中调用

(三)NDK 开发之生成并调用 so库_第8张图片

运行结果如下:

(三)NDK 开发之生成并调用 so库_第9张图片

over!

你可能感兴趣的:(android开发之NDK)