android-JNI

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

你可能感兴趣的:(android,jni)