1.安装ndk
下载一个android-ndk-r10e-windows-x86.exe文件,运行后会在选定目录下产生一个文件夹,就是ndk所在目录了。
2.配置ndk
file>project structure>SDk location>Android ndk location>选择ndk目录即可。这样之后在local.properties文件中可以看到ndk目录,当然可以直接在这个文件下设置目录,效果是一样的。
3.编写jni的java类
在src目录下新建jni目录,jni下新建文件MathKit.java
public class MathKit { public static native int square(int num); static { System.loadLibrary("JniDemo"); } }
这里有必要解释一下System.loadLibrary("JniDemo");,
需要在defaultConfig中添加如下代码:
ndk{ moduleName "JniDemo" }
目的是指定生成的so文件(C库)的名称,然后在java文件中加载这个so文件(C库)。
so文件位置如下:E:\Android\workSpace\ListenForUninstall\app\build\intermediates\ndk\debug\lib\arm64-v8a\libJniDemo.so
,切换到project视图查看。
同时记得在工程目录下的gradle.properties文件中写入下面这行:
android.useDeprecatedNdk=true
4.生成.h文件
cmd下运行如下命令 javah -jni (加上java类的目录)
这样就会生成头文件。
5.在main目录新建jni目录,把产生的头文件拷贝进去
6.在main/jni目录下新建对应的cpp文件(文件名和头文件一样),实现java类中定义的square函数
#include <jni_Mathkit.h> #include "../../../../../../../SdkandNdk/android-ndk-r10e/platforms/android-21/arch-arm/usr/include/jni.h" JNIEXPORT jint JNICALL Java_jni_MathKit_square (JNIEnv *env, jclass cls, jint num) { return num*num; }
这个cpp文件有必要解释一下内容,这个函数返回类型是jint(整形类型),参数是num,计算num的平方并返回。方法名称格式如下:
Java_包_类_函数名(注意包的.号改成-下划线,比如本例中jni.MathKit要写成jni_MathKit)。
8.在activity中调用square函数。
Log.i("", ""+MathKit.square(2));
至此结束