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文件单独在下篇给出.

 

 

 

 

 

posted @ 2014-03-16 15:43  MMLoveMeMM  阅读(312)  评论(0)    收藏  举报