平台: 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。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android日志获取工具
  6. Android(安卓)studio报错 Error retrieving parent for item: No
  7. AndroidStudio中配置AndroidAnnotations
  8. Android(安卓)Notes 之 Tween动画 (2)自定义动画
  9. android加密、签名相关

随机推荐

  1. 途牛面试经历
  2. android移动补间动画
  3. android用户界面-组件Widget-进度条Progr
  4. Android(安卓)基础:surfaceSurface、Surfa
  5. android Lint
  6. 设置Android程序图标
  7. Android图片缩放总结及比较
  8. Android中通过来电转移实现“电话已关机
  9. 关于 android 输入法 adjustPan无效的解
  10. Android屏幕元素层次结构