NDK JNI使用方法说明

编译NDK程序

       这里先介绍下Application.mk不在应用程序目录下的jni里,而是在其它目录下的jni里,这里具体目录就是在$NDK_ROOT/jni/下。通过Application.mk中的APP_BUILD_SCRIPT可以指定任意的应用程序里的Android.mk的特性来实现的。当然Application.mk也可以和Android.mk一起放在应用程序$Program/jni目录下,这种情况的编译请参见我的另一篇文章。



1. 安装工具:NDK和Cygwin(Windows)

    cygwin安装完成后,在C:\cygwin\home\administrator\.bash_profile文件中

    export ANDROID_NDK_ROOT=/cygdrive/E/Android/NDK/android-ndk-r8
    export NDK=/cygdrive/E/Android/NDK/android-ndk-r8
    export ANDROID_SRC=/cygdrive/E/Android/Src   ==》不是必要的

    对应路径书写为NDK安装以及工程路径


2. 使用Eclipse创建Android Project,java程序中写入如下内容:

    public native String getStringValue();
    
    public native String unimplementedGetStringValue();
    
    static {
     System.loadLibrary("JNITest");
    }

    生成对应的class文件


3. 使用javah生成native函数的头文件:

    命令路径:\Src\JNITest\bin\classes(对应工程的class路径)

    命令格式:javah -jni com.hybin.JNITest.JNITestActivity

    生成对应的*.h文件


4. 建立jni:

    创建jni文件夹

    新建Android.mk和*.c文件


5. Android.mk:

    LOCAL_PATH := $(call my-dir)


    include $(CLEAR_VARS)


    LOCAL_MODULE    := JNITest
    LOCAL_SRC_FILES := JNITestActivity.c


    include $(BUILD_SHARED_LIBRARY)

6. *.c

#include <string.h>
#include <jni.h>


/*
 * Class:     com_hybin_JNITest_JNITestActivity
 * Method:    getStringValue
 * Signature: ()Ljava/lang/String;
 */
jstring JNICALL Java_com_hybin_JNITest_JNITestActivity_getStringValue
  (JNIEnv *env, jobject obj){
   return (*env)->NewStringUTF(env, "TESTTEST !");
}


7. 编译so文件

     使用cygwin,cd到对应工程jni路径下,使用 $NDK/ndk-build编译生成so文件

   注:

      2> cd $NDK_ROOT, 在ndk安装目录下mkdir jni 目录。

      3>cd $NDK_ROOT/build/core,将该目录下的default-application.mk 拷贝到2>中jni目录下,并且重新命名为Application.mk。

      4> 修改Application.mk中变量内容,指定需要编译的project路径,并且指定project path下对应的build 的make file脚本。这里编译ndk自带的samples下的hello-jni工程。

            # Project Path
           APP_PROJECT_PATH := $(NDK_PROJECT_PATH)/samples/hello-jni  

           # We expect the build script to be located here
           APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk        

          变量APP_PROJECT_PATH是可选的,不过这里最好是指定下,看起来清晰些.

          变量APP_BUILD_SCRIPT是必须的



8. 在Eclipse工程中,refresh一下,然后调用*.c中的函数接口进行验证测试。


你可能感兴趣的:(eclipse,android,String,jni,Class,include)