使用jni步骤:
一、JAVA代码中写声明native 方法
二、创建jni目录,编写c代码,方法名字要对应
三、编写Android.mk文件
四、Ndk编译生成动态库
五、Java代码load 动态库.调用native代码
一,怎样写Android.mk文件
LOCAL_PATH := $(call my-dir) #注意:在此句后不能有空格,否则造成无法编译。
#错误提示:make: *** No rule to make target
include $(CLEAR_VARS)
LOCAL_MODULE := hello #编译库的名字
LOCAL_SRC_FILES := hello.c #编译的文件
include $(BUILD_SHARED_LIBRARY)
注意: (**env).NewStringUTF与 (*env)->NewStringUTF表示是同一个操作。
怎样给cygwin工具,配置环境变量,就可以在任何目录都可以执行ndk-build命令:
1.找到cygwin的安装目录。
2.找到安装目录下的etc/profile文件。这里面就是保存了cygwin的环境变量信息。
3.在文件的23行,PATH中指定ndk-build加到路径中。
如:PATH="/usr/local/bin:/usr/bin:/cygdrive/f/android/tools/android-ndk-r8-windows/android-ndk-r8:${PATH}"
通过ndk编译生成的obj文件夹的来历和使用:
使用ndk,通过android.mk编译jni下的c文件,会在obj下生成.o的链接文件,然后
会以.o的中间文件,执行链接的操作(根据不同的cup和操作系统版本)。最后
就在obj目录下生成.so文件。最后把.so文件,拷贝到libs目录下。
所以,当obj下的.o文件存在时,执行ndk-build就不会执行编译c文件操作,而是直接把
.so文件安装到libs目录下。
需要注意的是:当重新修改了c文件,需要执行ndk-build clean操作,去清空obj下的链接
文件,这样才能保证使用的是修改后的库文件。
so文件存放位置:
/data/data/包名文件夹/lib/**.so