ubuntu上实现Android(安卓)JNI示例
平台: ubuntu10.04
工具:eclipse,装好android-sdk(安卓开发环境),android-ndk(安卓交叉编译环境)
过程:
1. 新建android工程 JNItest:
工程目录在eclipse的workspace目录下:eclipse/workspace/JNItest
HelloJNI.java中调用了native 函数 getInt() 和getIntFromArray(), 如下:
static { *** } 部分为静态块,用于加载本地库。本例中System.loadLibrary("HelloJNI") 表示加载的本地库为 libHelloJNI.so
注:so库默认前缀为 lib
MainActivity.java中调用了HelloJNI类,如下:
2. 针对HelloJNI.java文件生成申明native 函数的头文件
1)首先编译HelloJNI.java文件,得到HelloJNI.class文件:
2)使用javah命令生成HelloJNI.class的头文件:
javah命令说明:
-classpath 表示要生成头文件的HelloJNI.class类文件所在路径,注意该路径不包含该类文件的包路径。例如:在工程目录中,该类文件路径为src/com/example/jnitest/HelloJNI.class ,则-classpath参数后的值为 src/
-d 表示生成的头文件所在的目录,一般放在工程目录下 jni/ 目录内。
最后的com.example.jnitest.HelloJNI表示的是类名(包名+类名称)。javah命令根据该值在src/目录下查找HelloJNI.class文件
运行javah,则在工程目录下的 jni/目录下生成的头文件如下:
3. 根据头文件提供的函数原型编写实现native函数代码的源文件:
源文件文件的名称是任意的,只要在该文件中包含了生成的头文件,并实现了头文件中申明的native 函数即可。
4. 编写make文件:
在jni/目录下,编写make文件 Android.mk
LOCAL_MODULE:= HelloJNI 表示生成的so库文件的名称为 libHelloJNI.so。该名称去掉前缀lib后(so库文件默认前缀为lib)应该和HelloJNI.java 文件中 LoadLibrary(“库名”) 的库名保持一致。
LOCAL_SRC_FILES:= HelloJNI.c 表示源文件为HelloJNI.c
5. 生成so库文件:
在工程目录下运行命令ndk-build
则生成的库文件libHelloJNI.so,在工程目录下的libs/armeabi/目录下。
在eclipse下运行该android工程,则成功实现JNI。
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android日志获取工具
- Android(安卓)studio报错 Error retrieving parent for item: No
- AndroidStudio中配置AndroidAnnotations
- Android(安卓)Notes 之 Tween动画 (2)自定义动画
- android加密、签名相关