ubuntu上实现Android JNI示例

本文详细介绍了如何在Ubuntu 10.04环境下搭建Android开发环境,通过Eclipse创建并配置JNI项目,实现Java与C/C++代码的互操作。包括生成JNI头文件、编译生成SO库文件、以及在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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值