1. 新建Android工程(暂定工程名为A),通过new->others将工程转化为可以编译C代码的工程,如下图,下一步中选中要转换的工程和编译工程中C代码的编译器类型(我已安装完成Cygwin,选CygwinGCC)。
2. 将jni的示例代码拷贝到工程A的根目录中(jni目录中包含Android.mk和hello-jni两个文件(在NDK的示例工程HelloJni代码中可以找到),如下图)。
3. 配置C代码编译器
在工程上右键-> properties->C/C++build设置如下图,其中D:\android\android\android-ndk-r9\ndk-build为我的ndk(可以到官网上去下载)的存放目录,点击Apply应用配置的设置。
在C/C++General -> Pathsand Symbols -> GNU C的Include目录设置如下图,我的为D:\android\android\android-ndk-r9\platforms\android-18\arch-arm\usr\include,点击Apply应用配置的设置。
4. C代码在Java中的使用:、
使用方法一:
在Java代码的MainActivity类中添加声明
static{
System.loadLibrary("hello-jni");
}
public native String stringFromJNI();
在Java代码中即可以使用C代码的函数,代码如下:
textView= (TextView)findViewById(R.id.showText);
textView.setText(stringFromJNI());
注意:函数名为:
jstring
Java_com_ch_candelete_MainActivity_stringFromJNI(JNIEnv* env,
jobject thiz )
com_ch_candelete为包路径,MainActivity为使用C代码的类,命名不一致程序将无法运行。
使用方法二:
新建包com_ch_tools,包中新建类CCode,将代码
static{
System.loadLibrary("hello-jni");
}
public native String stringFromJNI();
放到CCode类中。
在Java代码中定义CCode对象cCode,使用代码如下:
cCode = new CCode();
textView.setText(cCode.stringFromJNI());
注意:
C代码中的接口函数名要更改为:
jstring
Java_com_ch_tools_CCode_stringFromJNI( JNIEnv* env,
jobject thiz )
5. 参考资料:
http://blog.csdn.net/wuleihenbang/article/details/12680117
完成这个项目时,遇到问题即到网上查找原因,由于无法说清来源,即不再列出。