1、创建一个project-exampleJNI,目录结构:
E:\android\workspace\exampleJNI
2、建立一个c库的读取类nadd
public class Nadd {
static
{
System.loadLibrary("Nadd"); //Nadd c库名
}
public native int nadd(int a, int b);
}
3、实现Nadd 类加载c库,并调用c函数nadd()
Nadd cal = new Nadd();
setTitle("The Native Add Result is " + String.valueOf(cal.nadd(10, 19)));
4、cmd中通过javah命令生成com_example_examplejni_Nadd.h文件,用于保持java调用时命名正确
E:\android\workspace\exampleJNI\bin\classes>javah com.example.examplejni.Nadd 或者
E:\android\workspace\exampleJNI>javah -classpath ..\exampleJNI\bin\classes com.e
xample.examplejni.Nadd
5、创建jni文件夹,并将com_example_examplejni_Nadd.h拷贝过来,建立com_example_examplejni_Nadd.c文件,并实现代码
JNIEXPORT jint JNICALL Java_com_example_examplejni_Nadd_nadd
(JNIEnv *env, jobject job, jint a, jint b)
{
return a+b;
}
函数名以及参数从h文件中拷贝过来。
6、jni中创建Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libNadd
LOCAL_SRC_FILES := com_example_examplejni_Nadd.c
include $(BUILD_SHARED_LIBRARY)
7、调用ndk命令生成c库libNadd.so
E:\android\workspace\exampleJNI>ndk-build
生成目录E:\android\workspace\exampleJNI\libs\armeabi\libNadd.so
完成。模拟器完成。
貌似老版本需要先把库放入系统lib文件夹中。
防止调用不到库而失败。
E:\android\workspace\exampleJNI\libs\armeabi>adb remount 获取权限
E:\android\workspace\exampleJNI\libs\armeabi>adb push libNadd.so /system/lib //放入到系统的lib库文件夹中
如果失败可能是内存不足,可以把模拟器的system分区增大
emulator -avd youravdname -partition-size 128
E:\android\workspace\exampleJNI
2、建立一个c库的读取类nadd
public class Nadd {
static
{
System.loadLibrary("Nadd"); //Nadd c库名
}
public native int nadd(int a, int b);
}
3、实现Nadd 类加载c库,并调用c函数nadd()
Nadd cal = new Nadd();
setTitle("The Native Add Result is " + String.valueOf(cal.nadd(10, 19)));
4、cmd中通过javah命令生成com_example_examplejni_Nadd.h文件,用于保持java调用时命名正确
E:\android\workspace\exampleJNI\bin\classes>javah com.example.examplejni.Nadd 或者
E:\android\workspace\exampleJNI>javah -classpath ..\exampleJNI\bin\classes com.e
xample.examplejni.Nadd
5、创建jni文件夹,并将com_example_examplejni_Nadd.h拷贝过来,建立com_example_examplejni_Nadd.c文件,并实现代码
JNIEXPORT jint JNICALL Java_com_example_examplejni_Nadd_nadd
(JNIEnv *env, jobject job, jint a, jint b)
{
return a+b;
}
函数名以及参数从h文件中拷贝过来。
6、jni中创建Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libNadd
LOCAL_SRC_FILES := com_example_examplejni_Nadd.c
include $(BUILD_SHARED_LIBRARY)
7、调用ndk命令生成c库libNadd.so
E:\android\workspace\exampleJNI>ndk-build
生成目录E:\android\workspace\exampleJNI\libs\armeabi\libNadd.so
完成。模拟器完成。
貌似老版本需要先把库放入系统lib文件夹中。
防止调用不到库而失败。
E:\android\workspace\exampleJNI\libs\armeabi>adb remount 获取权限
E:\android\workspace\exampleJNI\libs\armeabi>adb push libNadd.so /system/lib //放入到系统的lib库文件夹中
如果失败可能是内存不足,可以把模拟器的system分区增大
emulator -avd youravdname -partition-size 128