一:创建工程
1.1 创建新的工程时勾选上Include c++ support,然后一路next
勾选的目的是为了写C代码时有代码提示1.2 创建完毕之后修改CMake你要生成的so库的名称
1.3 把Src/main/cpp文件夹下默认生成的c文件删除,并把MainActivity中默认生成与JNI有关的代码删除,然后Build->clean Project
二:环境配置
- 2.1 在local.properties文件中,加上本地NDK的路径,如果本地没有ndk,可在设置中下载
- 2.2 在gradle.properties中添加配置android.useDeprecatedNdk=true
- 2.3 修改gradle文件的default config领域中,添加 ndk{
moduleName “test-lib” //so文件: lib+moduleName+.so
abiFilters “armeabi”, “armeabi-v7a”//cpu的类型
}
定义so库的名称和CPU类型
三:代码实现
3.1创建一个类,类名为JNI,在其中定义本地方法
public native int[] increaseArrayEles(int[] intArray);表示将一个int数组中的每个元素都+1并返回3.2生成头文件,在java目录下执行 (javah 类的全路径)命令,并把生成的头文件移动到cpp文件夹下
- 3.3 在cpp文件夹下创建c文件,并编写C代码,C代码如何编写请查阅相关资料
* 3.4加载动态链接库,在JNI类,也就是定义本地方法的类中添加静态代码块,并在其中加载动态链接库
3.5此时,进行编译(Build->Rebuild Project),生成so库,路径在Build->intermediates->cmake->debug->obj 下
3.6此时在MainActivity中调用改本地方法,看是否成功
运行截图如下:
可见,输入的是10,20,30,输出的是20,30,40,运行成功,这里java调C就完成了