Android开发--JNI简述及静态注册

NDK
(Native Development Kit),原生开发工具包是一组可以在Android应用中利用C和c++代码的工具,可用以从源代码构建或利用现有的预构建库。
JNI
(Java Native Interface),通过使用 JAVA本地接口书写程序,可以确保代码在不同的平台上方便移植。JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
Android系统按语言来划分的话由两个世界组成,分别是Java世界和Native世界。那为什么要这么划分呢?Android系统由Java写不好吗?除了性能的之外,最主要的原因就是在Java诞生之前,就有很多程序和库都是由Native语言写的,因此,重复利用这些Native语言编写的库是十分必要的,况且Native语言编写的库具有更好的性能。
这样就产生了一个问题,Java世界的代码要怎么使用Native世界的代码呢,这就需要一个桥梁来将它们连接在一起,而JNI就是这个桥梁。
在这里插入图片描述
在Android开发中,由于种种原因需要调用C/C++代码, 这个时候就要用到JNI(Java Native Interface)了, 在调用JNI相关方法之前, 要对java中native关键字定义的方法进行注册, 注册方式有两种: 静态注册和动态注册, 两者优缺点如下:
静态注册
优点: 理解和使用方式简单, 属于傻瓜式操作, 使用相关工具按流程操作就行, 出错率低
缺点: 当需要更改类名,包名或者方法时, 需要按照之前方法重新生成头文件, 灵活性不高
动态注册
优点: 灵活性高, 更改类名,包名或方法时, 只需对更改模块进行少量修改, 效率高
缺点: 对新手来说稍微有点难理解, 同时会由于搞错签名, 方法, 导致注册失败

静态注册详细步骤:
1.在Android工程中的JAVA代码中编写被native修饰的方法.
例如:
在这里插入图片描述

 2.将native方法所在的类生成.h头文件. CMD命令: javah -jni 完整类名 (注意java类的文件路径).

例如:
在这里插入图片描述
注意:生成头文件以后将它单独放在一个文件夹中方便查阅修改,一般新建一个名字为jni的目录存放.c和.h文件.

  3.新建.h文件并编写C/C++代码实现里面的接口. 注意:编写C/C++代码时要遵循JNI的规则. 具体规则请查看原版JNI文件,本文附件中有.

在这里插入图片描述

  4.编写配置文件: Android.mk , application.mk保存到和C代码文件的同目录中,注意正确修改模块名称以及源.c文件名.

在这里插入图片描述

  5.使用CMD命令: ndk-build生成.so文件 注意:使用命令时候如果没有配置系统环境请在.c文件的目录下执行.

在这里插入图片描述

   6.在java代码中加载模块名称.
     ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191205135240445.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lKSllYTQ==,size_16,color_FFFFFF,t_70)
  
  至此,静态注册完毕.
  本文主要介绍了从JAVA层到Native层通过JNI静态注册的方法实现了C代码中的字段传输.  那么还有从Native层到JAVA层通过JNI静态注册的方法实现JAVA代码中的字段以及函数呢,这里由于字数限制原因,就不做过多赘述,详细代码已经附在下面文件中.

下面是演示效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
需要学习安卓逆向可以联系1847076032

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值