NDK全称Native Development Kit(本地开发工具集,),NDK是一系列工具集,可以帮助开发者在Android平台上面进行c/c++的开发,并能自动将.so打包金apk中。关于NDK的环境配置大家自行google解决,本文介绍初步的开发流程。
一、创建项目并配置
1.新建Android项目,并在自己需要加载so文件的类或者自己新创建一个java类,在这里我先创建了一个类
2.HelloJni。生成C/C++代码的存放路径:如图,选中app目录,创建完成后会在main文件夹下创建一个jni目录。
3.build.gradle配置
4.如果报错可根据提示在gradle.properties中设置android.useDeprecatedNdk=true
二、native方法声明与.h文件的生成
如下:在类文件中声明native方法
c文件.h的声明文件可以根据规则自己写,这样比较麻烦并且容易出错,所以我们还是通过javah命令创建,将目录切换到/app运行命令 如果报错如下图,那是说明你的类文件没有编译成class文件,才会出现错误。解决的办法有多种,这里我是在HelloJni类中添加main方法之后运行一次即可。
javah -d src/main/jni/ -classpath build/intermediates/classes/debug/ com.allen.ndkdemo.jnis.HelloJni
-d src/main/jni 是命令创建的.h文件的存放路径
-classpath build/intermediates/classes/debug/ com.allen.ndkdemo.jnis.HelloJni 创建.h文件所需要的java编译后的文件路径
执行javah命令之后会在src/main/jni 目录下生成头文件com_allen_ndkdemo_jnis_HelloJni.h 到此头文件成功创建
三、C/C++代码的编写
.h 文件只是一个声明文件,真正我们需要操作的代码文件应该是.c文件,所有在jni目录下创建同名的.c文件并引入声明文件,并在代码中返回一个字符创。如图所示:
四、生成so文件配置及ndk-build
下面我们需要在jni目录下添加 Application.mk文件、Android.mk文件,添加完文件之后,将目录切换到 src/main/jni下执行ndk-build命令Application.mk文件
Android.mk文件
ndk-build命令之后的文件目录:
五、so文件的加载与使用
HelloJni.java中加载类库static{
System.loadLibrary("hello");
}其他地方直接调用即:HelloJni.getkey();