android jnilib放在哪个目录下,Android中的JNI使用指南一

一、简介

JNI全称是Java Native Interface(Java本地接口)单词首字母的缩写,本地接口就是指用C和C++开发的接口。由于JNI是JVM规范中的一部份,因此可以将我们写的JNI程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/C++写的大量代码。

开发JNI程序会受到系统环境的限制,因为用C/C++语言写出来的代码或模块,编译过程当中要依赖当前操作系统环境所提供的一些库函数,并和本地库链接在一起。而且编译后生成的二进制代码只能在本地操作系统环境下运行,因为不同的操作系统环境,有自己的本地库和CPU指令集,而且各个平台对标准C/C++的规范和标准库函数实现方式也有所区别。这就造成使用了JNI接口的JAVA程序,不再像以前那样自由的跨平台。如果要实现跨平台,就必须将本地代码在不同的操作系统平台下编译出相应的动态库。

JNI开发流程主要分为以下5步:

1、创建一个类(HelloJNI.java)声明本地方法

2、将Javac编译源文件HelloJNI.java,生成HelloJNI.class。

3、用javah -jni命令生成HelloJNI.h头文件(javah是jdk自带的一个命令,-jni参数表示将class中用native声明的函数生成jni规则的函数)

4、用本地代码实现HelloJNI.h头文件中的函数

5、将本地代码编译成动态库(windows:*.dll,linux/unix:*.so,mac os x:*.jnilib)

1aeb7ed3da4c9381e9e8cea76c59e3a4.png

二、项目实战

通过eclipse新建一个HelloJNI的android项目,并且在该项目的根目录新建jni文件夹。如图1:

893e943e818b27bb48291e20efc17b3c.png

2. 新建一个HelloJNI.java文件并声明native方法,如图:

3d8e45b7df13de2e87c90966ab0d87a7.png

3. 用javac命令将.java源文件编译成.class字节码文件

5597d00652aa44b82110a2a860643a41.png

注意:-d 表示将编译后的class文件放到指定的目录下,这里把它放到和src同级的bin目录下

4. 用javah -jni命令,根据class字节码文件生成.h头文件(-jni参数是可选的)

1c608567c0d59ac4f4e50f275654c6c3.png

也可以通过-o参数指定生成头文件名称:

90a0062891027a40d45c6121c185ff66.png

参数说明:

-classpath :类搜索路径,这里表示从当前的bin目录下查找

-d :将生成的头文件放到当前的jni目录下

-o : 指定生成的头文件名称,默认以类全路径名生成(包名+类名.h)

注意:-d和-o只能使用其中一个参数

5. 用本地代码实现.h头文件中的函数

34a0280b1b5f2171cfc266577400e567.png

6. 将C/C++代码编译成本地动态库文件在android中将jni代码编译成动态库,需要添加Android.mk文件,如下:

a359573b1e394eec14246ad1bb65de3b.png

7. 编译apk文件,也需要添加Android.mk文件,如下:

88f56a32e45d4a65562b4dd3a95ea607.png

3feb7d1719819718dc6331e3748b5ea6.png

编译结果如下:

a9214bc085d9104822a1e541a96f23da.png

将HelloJNI.apk推动系统/system/app目录,将libHelloJNI.so推动系统/system/lib目录,然后启动应用,运行结果如下:

f38cc25dc8c9fee97ddf53a86e132415.png

5ff9872078d6a5b4f994f962e3693130.png

标签:代码,编译,JNI,本地,HelloJNI,jni,使用指南,Android

来源: https://blog.csdn.net/u013357557/article/details/87915231

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值