Android NDK JNI开发<1>
NDK开发环境搭建参照博客其他文章,搭建好了以后开始测试第一个ndk文件夹下面samples HelloJni工程,步骤如下:
<1> : 启动cgywin,然后输入cd $NDK,显示如下:

进入主目录后,其他查看目录或者进入深一级目录命令和linux一样,不多解释;
进入然后输入 : cd ./samples/hello-jni(进入工程目录下).
<2> : eclipse启动,import hello-jni工程,可以在导入之前先手工备份这些samples
<3> : 进入目录就可以开始编译了,输入: $NDK/ndk-build(没有空格);

demo中会编译出4个针对不同cpu的so文件,这个是在C中预定义好的.生成的so放在工程libs下:

<4> : 由于这个demo不需要自己写,所以在eclipse中点击运行工程,就可以看到结果:

<5> : 接下来,我们就在这个demo上进行修改,首先修改C文件:
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { #if defined(__arm__) #if defined(__ARM_ARCH_7A__) #if defined(__ARM_NEON__) #define ABI "armeabi-v7a/NEON" #else #define ABI "armeabi-v7a" #endif #else #define ABI "armeabi" #endif #elif defined(__i386__) #define ABI "x86" #elif defined(__mips__) #define ABI "mips" #else #define ABI "unknown" #endif return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI - " ABI " successfully !"); }
只是简单的修改了return返回的结果,重新上面的编译步骤,但是在运行之前,eclipse中要先clean一下,否则可能出错.
<6> 使用so库,需要做两件事,然后才能够使用:
1:先声明加载库文件:
/* this is used to load the 'hello-jni' library on application * startup. The library has already been unpacked into * /data/data/com.example.hellojni/lib/libhello-jni.so at * installation time by the package manager. */ static { System.loadLibrary("hello-jni"); }
2:声明库中要调用的函数:
/* A native method that is implemented by the * 'hello-jni' native library, which is packaged * with this application. */ public native String stringFromJNI();
3:使用:
tv.setText( stringFromJNI() );
<7> : Android.mk文件单独在下篇给出.

浙公网安备 33010602011771号