Android jni学习

十度 Android 2016年03月12日 收藏

笔者使用的是eclipse开发环境,ndk环境已搭建好(怎样搭建可百度  so easy)

jni使用流程:

      1.随便新建一个Android项目,在项目根目录下创建jni目录,并在目录下建立一个Android.mk文件

Android.mk文件编译如下(双斜杠为注释部分,不用复制):

 //编译时的目录,开发树中查找源文件。,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

LOCAL_PATH := $(call my-dir)        

include $(CLEAR_VARS)               //

 

//LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。

LOCAL_MODULE := nativeadd           //编译后库文件的名称

 

//LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。【注意,默认的C++源码文件的扩展名是’.cpp’. 指定一个不同的扩展名也是可能的,只要定义LOCAL_DEFAULT_CPP_EXTENSION变量,不要忘记开始的小圆点(也就是定义为‘.cxx’,而不是‘cxx’)(当然这一步我们一般不会去改它)】

LOCAL_SRC_FILES := nativeadd.c     //这里写的是需要编译的.c文件  

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)

 

2.在java文件中建立有native方法的类文件:

 

3.用javah 命令生成c的头文件

这里有两种方法可以实现:

a.eclipse 中配置javah命令

备注:上图中需要配置的三项内容如下:

${system_path:javah}

${workspace_loc}

-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}

配置好之后,选中需要本地包含native方法的java类  ,并运行javah命令,刷新jni目录,该目录会多一个.h文件

 

4.在jni目录建立一个.c文件  实现头文件中的方法

 

5.命令行中进入jni文件目录,使用ndk-build命令生成.so文件:

成功后,本项目libs目录下会多个.so文件

 

6.在项目调用native jni方法

完结。

 

 

注:其中第三步  javah 命令生成c的头文件

第二种方法,将NativeAdd类在eclipse中导出为jar(主要为了获取.class文件)

并解压到文件到电脑中的任意目录

cd 到该目录,直接使用命令:javah -jni com.zbtx.maize.nativedemo.NativeAdd,即可生成.h文件