这几天突然想学习一下Android下JAVA调C(JNI调用),所以就整个流程走了一遍。
环境:Win7+Eclipse+Android SDK+NDK(后期把.c文件生成so库要用)
那么就开始了:
1、在工程代码目录下建立一个java文件,我这里用的是HelloJNI。
2、编写HelloJNI文件,写入native方法
3、运行程序,(主要是为了生成HelloJNI.java文件的class文件)
程序运行之后,打开项目根目录下的bin\classes\com\vriteam\android\ndk\HelloJNI.class
蓝色文字要根据自己情况去处理(HelloJNI.java所在包的包目录,我的是com.vriteam.android.ndk)
4、若果class文件存在,运行cmd命令,进入到项目的根目录下的bin\classes文件夹下,输入命令
javah com.vriteam.android.ndk.HelloJNI
这时候会在classes文件夹下生成一个xx.h文件
我的是com_vriteam_android_ndk_HelloJNI.h,这个文件名称也是有规律的
5、在项目个目录创建一个“jni”文件夹,并把上一部生成的.h文件copy到里面。
6、编写com_vriteam_android_ndk_HelloJNI.c文件,实现.h文件中的方法。
7、在jin文件夹下创建文件Android.mk
8、编辑Android.mk文件加入下面代码:
LOCAL_PATH:= $(call my-dir)
# 一个完整模块编译
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=com_vriteam_android_ndk_HelloJNI.c
LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
LOCAL_MODULE := HelloWorld
LOCAL_SHARED_LIBRARIES := libutils
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_TAGS :=optional
include $(BUILD_SHARED_LIBRARY)
9、点击Eclipse中的菜单,项目-》属性-》
弹出框,点击编译器-》新建-》
弹出框,选择程序-》确定-》
弹出框,点击 主要-》浏览文件系统-》
弹出框,选择自己的ndk目录,并选择ndk-build.cmd
再选择自己的项目 浏览工作空间-》
选择自己的项目 -》
配置构建选项页面 构建选项-》
选择资源勾选自己NDK项目下的jni文件夹
点击确定按钮 确定-》
点击确定按钮 确定-》
选择Eclipse中的 项目-》构建项目-》
选中项目,按F5刷新
查看libs下的文件
修改文件下的HelloJni加载库文件的名字,不用加".so"
程序其他地方调用就OK了。
10、调用JNI
调用的时候,不用加上前面的lib以及后缀名.so
调用的时候,不用加上前面的lib以及后缀名.so
调用的时候,不用加上前面的lib以及后缀名.so
相关链接:
1、JNI调用(没有说生成so文件)
http://www.cnblogs.com/bastard/archive/2012/05/19/2508913.html
1、Android NDK生成so文件
http://blog.csdn.net/laczff21/article/details/7542236
PS:为什么QQ截的图当时能用,在编辑保存全没了