NDK中JAVA通过JNI调用C的实现步骤
1、创建android工程test
2、在已创建的android工程中创建一个XXX类,并在本类中声明一个native方法,加载本地C库文件的静态块
3、编译刚刚创建的XXX类,得到XXX.class文件
4、使用javah工具产生C语言的.h头文件
A、在test工程的根目录下创建一个jni文件夹
B、打开命令窗口,切换到test工程下的jni文件路径,执行
javah -classpath ../bin/classes com.jmc.ndk.XXX(包名+类名)
,执行完该语句后,jni文件夹下面会自动生成一个XXX.h文件
PS:此步骤可能的问题:
无法访问android.app.Activity,找不到android.app.Activity的类文件
解决方法:
javah -classpath bin/classes;D:\sdk\adt-bundle-windows-x86-20140321\sdk\platforms\android-22\android.jar -d jni com.XXX.MainActivity
说明:-classpath是用来装入类的路径的,-d用来指定输出路径
5、把之前创建的test工程整个复制到NDK的samples目录下,接着在jni文件夹目录下编写C程序,实现之前声明的native方法
6、从samples目录下其他文件夹中复制一个mk文件,修改其中的MODULE和SRC_FILES内容
7、编译并链接C 程序
A、启动Cygwin
B、切换到NDK/samples/test目录
C、执行 ../../ndk-build ==》生成so文件
8、使用java调用生成的so文件
A、复制生成的so文件到test工程的根目录下
B、修改XXActivity,调用XXX中的native函数
C、运行该工程即可