NDk的用处:1,核心代码保护,写入由于apk的Java层代码很容易被反编译,而C/C++库反汇难度较大。
NDK开发常用于-驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。
JNI java native interface
1、 NDK是一系列工具的集合。
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者帮助时巨大的。
2、NDK提供了一份稳定、功能有限的API头文件声明。这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、log库(liblog)。
1,首先是so文件的生产
创建Native方法
public class NdkJniUtils { static { System.loadLibrary("native-lib"); } //获取C中隐藏的AppKey public native String getStringFromNative(); //native方法 }2,build->make project生产class文件
3,使用android studio自带的Terminal进入cd app/src/main 然后执行javah -d jni -classpath {sdk位置}\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug {类的package.类名} 示例如下:
javah -d jni -classpath D:\android_studio_new\sdk\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug com.xcm91.relation.ndkapp.NdkJniUtils
在ndk会自动生成一个.h文件
4,创建.c文件引用.h文件
#include "com_xcm91_relation_ndkapp_NdkJniUtils.h" JNIEXPORT jstring JNICALL Java_com_xcm91_relation_ndkapp_NdkJniUtils_getStringFromNative(JNIEnv *env, jclass obj) { char buf[] = "HEllO JNI"; return (*env)->NewStringUTF(env,buf); }5,build->rebuile project
在app\build\intermediates\ndk\debug\lib\中生产so文件
6, System.loadLibrary("hello"),把so库加载进来(可以调用native本地方法了)
细节
ndk {
moduleName "hello"
abiFilter "x86"
abiFilter "armeabi"
}
检查so文件是否生成