找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 145|回复: 0

AndroidStudio最详细JNI教程

[复制链接]

2万

主题

137

回帖

13万

积分

管理员

积分
139366
发表于 2021-12-17 16:23:10 | 显示全部楼层 |阅读模式 IP:山东省青岛市 移动

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×



一:概述
在工作中,开发的项目一直没有用到jni知识,很多情况下都是拿别人的so包来用,jni的流程看了一遍又一遍,但是从来没有自己动手实现过,今天我们就自己动手实现一遍,让知识记得更牢固一些。

二:NDK下载
要实现我们的jni,首先一定要先下载NDK,NDK是什么?我相信很多小伙伴面试的时候一定背这道面试题了吧.如下:


NDK是一系列工具的集合
NDK提供了一份稳定、功能有限的API头文件声明
NDK的发布,使“Java+C”的开发方式终于转正,成为官方支持的开发方式
NDK将使Android平台支持C开发的开端

那么我们下载NDK,有两种下载方式:


这是Google官方下载 ​ ​点击下载NDK​​
通过SDK Manger下载
1.png

2.png
点击SDK Manger -> SDK Tools -> NDK -> 点击Apply

OK,NDK下载完成

三、NDK配置
我们先创建一个项目,里面只有一个MainActivity
3.png

右键项目 -> Open Module -> Android NDK Location -> OK -> 等待编译
4.png

我们发现根目录local.properties里面多了NDK路径如下图:
5.png


接着我们在根目录gradle.properties下面加上如下图:

​​android.useDeprecatedNdk=true​​
6.png


继续我们在module下面的build.gradle下面加上ndk节点如下图:

ndk {
        moduleName "JNISample"
    }
1.
2.
3.
7.png

四、编写JNI接口
我们创建一个​​JNIUtil​​​的类,编写一个​​native​​​方法如下图:
8.png
我们Build -> Make Project一下,我们会发现在​​/JniTestSample/app/build/intermediates/​​下面多了一个​​classes​​文件夹.我们可以打开AS下面的​​Terminal​​进入到​​classes​​下面的​​debug​​文件夹下

如下图:
9.png


前面有重点有弯道,请注意

我们在​​Terminal​​执行一下​​javah com.xiaoyuan.jnitestsample.JNIUtil​​ javah是后面是我的包名

你们一替换成自己的包名,执行完这句话以后会有个.h文件生成出来如下图所示:
10.png


我们基本已经完成一半了,但是我们发现很多小伙伴执行javah的时候会出现不少内部或者外部命令这样的问题,这样的问题大多数都是由于java环境变量没有配好,如何配置环境变量,需要小伙伴自己百度一下了。

生成.h文件不够,这只是声明了这个方法,我们还需要实现它,我在main文件下新建一个​​jni​​文件夹如下图:
11.png

新建以后,我们把刚才生成的.h文件移动到你新建的jni文件夹下,紧接着我们创建一个c++类来实现.h里面声明的方法.

我们把.h类纯复制一份,把后缀名改成.cpp。里面实现它的方法,我们在方法里面返回一句话;

如下图:
12.png


上面​​include​​​就是咱们的倒包,我们看他的方法名是有规律的就是​​java+包名+类名+方法名​​。

接着我们在​​JNIUtil​​里面加上

static
{
    System.loadLibrary("JNITestSample");//名字注意,需要跟你的build.gradle ndk节点       下面的名字一样
}
13.png


让系统加载我们编译成的so。

最后我们来使用一下,看是否可以编译so. 我们需要在MainActivity来使用一下如下图:
14.png


我们运行一下:OK 我们已经顺利的编译出so如下图:
15.png


并且我们的手机端已经显示出了我们的“HelloWorld!”:
16.png


四、写到这,我们已经完成了jni的最重要的一步,虽然很简单,但是我还希望小伙伴们能自己实现一下,才能加深印象。
五、下载
​ ​Demo下载​​

注:需要把NDK路径改成自己
-----------------------------------
©著作权归作者所有:来自51CTO博客作者wx5a937110dbf3b的原创作品,如需转载,请注明出处,否则将追究法律责任
AndroidStudio最详细JNI教程
https://blog.51cto.com/u_13613284/4811574

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|时间戳|加密|CTF WiKi|CTF平台汇总|CTF show|ctfhub|棱角安全|rutracker|攻防世界|php手册|peiqi文库|CyberChef|猫捉鱼铃|手机版|小黑屋|cn-sec|IOTsec-Zone|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2024-9-19 09:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表