1.建立android工程,如JNITest,在包com.android.test下建立类JNIactiviy,JNIuseSo.
2.在JNIuseSo中声明native方法,如public native String getCString();
3.进入工程目录的bin目录中,使用命令javah -classpath ./classes -jni com.android.test.JNIuseSo
则在bin目录下生成com_android_test_JNIuseSo.h头文件。
注意:此步骤可能报错误:提示找不到类android.app.Activity.解决方法是:换成命令
javah -classpath $ANDROID_PLATFORM/android.jar:./classes -jni com.android.test.JNIuseSo
其中ANDROID_PLATFORM定义了你安装android_sdk中的platform中的使用到的对应android版本的系统库。
我的是ANDROID_PLATFORM=/home/zhenglei/Install/android-sdk-linux/platforms/android-15
定义在~/.bashrc文件中。
4.在工程到根目录下创建一个文件夹用来保存要实现的C/C++工程,如jni.
5.把刚刚生成的头文件放到jni下,并且在jni文件夹中建立一个C/C++文件,如a.c等实现生成到头文件中声明的函数。
6.在jni文件夹下写一个Android.mk文件,配置了编译的一些要求,如:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := JnitestSo
LOCAL_SRC_FILES := a.c
include $(BUILD_SHARED_LIBRARY)
7.cd到android工程目录或jni目录下,执行命令$NDK/ndk-build将在android工程下的libs/armeabi下生成.so库或者.a库,
依据Android.mk的配置而定。如生成库libjni_test.so
8.生成.so库之后,就可以在java代码中调用.so库中到native函数了,
如在JNIactiviy中调用首先要进行库到加载:
static{
System.loadLibrary("jni_test");
}