android 程序基于java写之后,正式发布之后很容易被反编译,因此需要一种方式去对代码或者敏感数据进行保护(例如通讯密钥等),ndk是一种很好的解决方案。
ndk可以生成较难进行反编译的二进制库(.so)文件。
首先需要进行ndk的环境搭建,eclipse的搭建很简单,首先eclipse中增加android的插件,其需要下载一个ndk的包,然后在eclipse的设置中,Android项中的ndk的路劲进行设置:
如图:
随后就可以开始进行NDK的开发了,随后通过一个例子来进行ndk的开发。
首先,建立一个新的android工程,随后新建一个jar包,并编写准备用于C++开发的接口类。类的代码如下:
public class ndkHelloWorld {
public static native String stringFromNDK();
}
然后找到对应的classes目录,使用javah命令生成对应的头文件,命令为:
javah -jni com.example.ndk.ndkHelloWorld
随后就能在classes目录下能够看到一个com_example_ndk_ndkHelloWorld.h,这个文件就是生成的头文件了。
然后我们要进行so库的添加,右键项目属性,在选中android tool,add native support,如下图:
点击之后,会让你输入so的名称,输入之后,就可以看到我们的项目列表多了一个jni文件夹,有关ndk的相关数据均在这个文件夹下,把我们之前通过javah生成的头文件放入该文件夹下。
Android.mk就是jni的编译文件,语法这边不再展开了。
在CPP中实现com_example_ndk_ndkHelloWorld.h中的方法,并引入之前生成的头文件:
#include "com_example_ndk_ndkHelloWorld.h"
jstring Java_com_example_ndk_ndkHelloWorld_stringFromNDK
(JNIEnv *env, jclass obj){
return env->NewStringUTF("Hello ndk");
}
然后回到我们之前的那个ndkHelloWorld,加上对so的链接。
static {
System.loadLibrary("ndkHelloWorld");
}
然后我们就可以再其他文件中调用这个类的ndk方法了。
mTextView.setText(ndkHelloWorld.stringFromNDK());
代码位置:
http://download.csdn.net/download/highkgao1988/8982487