高级Android软件开发必须要懂JNI,由于网上大部分教程还是eclipse版本的,那今天我们就来说一下Android Studio下是如何使用JNI的。
我就直接开门见山了,大约一共十步。
1. 加载动态链接库与native方法
2.在app的build.gradle中配置ndk信息与指定.so文件存放位置
3.在main/java下新建jni文件夹目录
4.生成.h文件
找到java目录,shift加鼠标右键打开cmd,输入命令:javah com.example.administrator.jnicalputer.MainActivity(自己java类的包名),以此来在java目录下生成指定java类的.h文件(也叫C头文件,包含所指定java类所有native方法)
5.将刚才java目录下生成的.h文件移到jni目录下。
6.编写C代码
C代码的编写很简单,将.h文件中的所有代码复制一份到.c文件中,然后添加方法实现即可。具体逻辑我就不说了。
7.编写Android.mk文件和Application.mk文件。
前面一步的图里面可以看到jni包里面多了一个Android.mk文件和Application.mk文件,还有一个main.c文件是上一步我们生成的
Android.mk文件和Application.mk文件是用来控制编译.so文件的,Android.mk文件控制.so文件如何编译, Application.mk文件控制支持的架构平台.
`Android.mk: LOCAL_PATH := (callmy−dir)include (CLEAR_VARS)
LOCAL_MODULE := JNICAP (动态链接库的名称)
LOCAL_SRC_FILES := sum.c (C代码文件)
include $(BUILD_SHARED_LIBRARY)
Application.mk: APP_CFLAGS += -Wno-error=format-security
APP_ABI := armeabi, armeabi-v7a, x86 (如果是多个架构平台,之间用,隔开)
`
8.编译.so文件
在jni目录下打开cmd,输入ndk-build命令;
命令执行成功后在工程的libs文件夹下面生成指定架构平台的.so文件,如果不添加Application.mk文件,则会生成所有架构的.so文件。
编译出来的.so默认是放在main里面的libs文件夹下的,需要将libs重命名为jniLibs!
9.添加 android.useDeprecatedNdk=true 到该 gradle.properties 文件中。
10.打包运行看效果。