Android中NDK的搭建及简单使用:
使用NDK,简述其重要步骤:
、搭建NDK环境(作用:用于自动生成jni下的.c对应的so文件)---到Android NDK官网或Android官网下载ndk包,环境搭建步骤具体参看http://www.cnblogs.com/yejiurui/p/3476565.html
2、以eclipse为例,在com.test下创建Test2.java文件,会自动在项目的bin\classes\下生成相应的.class文件【若在项目中看不到,则可能当前在eclipse中
查看的是Package Explorer,切换到Navigator即可】如图
3、使用命令行切换目录至bin\classes\下,执行javah com_test_Test2,在该目录下生成对应的.h文件
4、在项目根目录下创建名为jni的文件夹(必须为jni),将上述3中生成的.h文件复制到该目录下
5、创建同名的.c文件com_test_Test.c,实现具体的在Test2.java中声明的native方法
6、在jni下创建文件Android.mk,配置具体生成so文件的信息,例如:名称、依赖的源文件(.c)
注意:若有同个.c文件则可以生成一个so文件或分别生成各自的so文件
(1)若生成一个so文件,以空格或Tab键隔开不同的源文件,换行使用 \ ,在Android.mk中信息格式为:
LOCAL_SRC_FILES := com_test_Test2.c com_test_TestNoNDK.c
换行: LOCAL_SRC_FILES := com_test_Test2.c \ com_test_TestNoNDK.c
如图:
(2)若生成不同的so文件,则需要以以下格式为模块:
include $(CLEAR_VARS)
LOCAL_MODULE := TestNDK #生成的so文件的名称
LOCAL_SRC_FILES := com_test_Test2.c #源文件
include $(BUILD_SHARED_LIBRARY)
如图:
7、上述完成后,会发现在项目的libs目录下有对应的so生成,整个结构如图:
8、在项目中使用时,需要先静态加载库文件
static{
System.loadLibrary("TestNDK");
}
9、加载完成之后,在项目中直接通过类名调用相应的方法即可(因都是静态方法)
上述仅是按照自己的理解简要总结的ndk使用的步骤,详细步骤可参看:http://www.cnblogs.com/yejiurui/p/3476565.html
补充:
Android.mk:
关于mk语法讲解:http://www.cnblogs.com/wainiwann/p/3837936.html
Android.mk中常用的属性含义:http://www.cnblogs.com/welhzh/p/4532142.html
个别含义:
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。
Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so. 但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。
------
JNI的使用场景:
简单的说:JNI是Java平台定义的用于和宿主平台上的本地代码进行交互的“Java标准”,它通常有两个使用场景:
1.使用(之前使用c/c++、delphi开发的)遗留代码;
2.为了更好、更直接地与硬件交互并获得更高性能。