转载请注明出处http://blog.csdn.net/wudiwo/article/details/7571057
反复研究技术的结果只有一个那就是让你感觉到它越来越简单。就像下面将要讲述的JNI的调用,刚开始接触的时候还感觉一头雾水,现在一切变的又是那样的清晰明朗。废话不多说,下面总结一下
环境搭建 :
1、Ubuntu下关于JDK、SDK、NDK等的环境变量的配置不多少,这些都是最基本的东西,不大清楚问下谷歌或百度。
2、Eclipse 下进行的开发。
整个实现流程 :
1、新建Android项目 HelloJni 并新建一个类 如下
package com.fan.hellojni
public class HelloJni extends Activity{
private void onCreate(Bundle bundle){
super.onCreate(bundle);
LinearLayout lay=new LinearLayout(this);
setContentView(lay);
TextView tv=new TextView(this);
tv.setText(myJNI());// 这个是对JNI 本地方法的调用,当然这个要加载.so 之后
lay.addView(tv);
}
// 下面是重点
private native String myJNI();
static{
System.loadLibrary("hello-jni.so");// 这个命名要和Android.mk保持一致
}
}
2、生成.h文件,.h文件主要是用来参考里面的方法名来编写.c 或者.cpp 文件。ubuntu 下打开终端,进入项目的calsses目录下,运行命令javah com.fan.hellojni.HelloJni 然后你会发现在calsses下面多了个com_fan_hellojni_HelloJni.h 的文件
3、根据.h里面的方法名,编写.c 文件。直接拷贝方法名到.c 文件,然后在这个方法里面实现自己的功能。这里具体的内容不再给出因为项目不在跟前。有什么疑惑的可给我留言。
4、在项目根目录下 新建jni目录,然后把.c 文件拷贝到该目录下面,还要新建一个Android.mk 文件,两个文件要放在一块,这是编译.so不可缺少的。
5、在项目的根目录下 运行 ndk-build
compile thumb : hello-jni<=hello-jni.c
sharedLibrary : libhello-jni.so
Install :libhello-jni.so=> libs/armeabi/libhello-jni.so
出现上面的信息,恭喜你已经成功了
Android.mk 文件主要配置一下几项内容:
LOCAL_PATH :=$(call my-dir) // 一个Android.mk 文件必须定义的LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数“my-dri”由编译系统提供 ,用于返回当前的路径(即包含Android.mk file文件的目录)
include $(CLEAR_VARS) // CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...), 除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有 的变量都是全局的。
LOCAL_MODULE : hello-jni // 编译的目标对象,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。
注意:编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'hello-jni'的共享库模块,将会生成'libhello-jni.so'文件。 重要注意事项:如果你把库命 名为‘libhello-jni’,编译系统将不会添加任何的lib前缀,也会生成libfoo.so,这是为了支持来源于Android平台的源代码的 Android.mk文件,如果你确实需要这么做的话。
include $(BUILD_SHARED_LIBRARY) //BUILD_SHARED_LIBRARY 表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调 用'include $(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做。还有BUILD_STATIC_LIBRARY变量表示生成静态库:lib$(LOCAL_MODULE).a, BUILD_EXECUTABLE 表示生成可执行文件。
怎么样,简单吧!希望对你能有所帮助!?转载请注明出处http://blog.csdn.net/wudiwo/article/details/7571057