day11-JNI介绍

四 JNI介绍和安装

4.1 JNI介绍

JNI,java native interface ,Java本地开发接口,实现在安卓中JAVA和C语言之间的相互调用。

# 之前写安卓,全是用java写
# 后期可以用c写安卓,写了后,需要使用java调用c的方法,完成功能

image-20231021143121168

4.2 NDK安装

NDK是JNI开发的工具包

NDK,Native Develop Kits,本地开发工具(在Android Studio中下载即可)

image-20231021143137705

五 创建JNI项目

# 普通项目:Empty Activity(Java)
# jni项目:Native C++(Java + C)
创建的项目多了一些内容和配置(基于C++实现了一个算法,并在Java中进行了调用)。
- 有了默认配置后,我们就不需要自己的手动配置了。
- 会生成一些我们用不到的默认文件,等我们学会自己再回来删除他默认的这些文件。

5.1 创建项目

image-20231021143155807

5.2 快速开发

# 1 第一步:在cpp目录下,新建c文件[注意选择c结尾]
#include <jni.h>
JNIEXPORT jint
JNICALL Java_com_justin_s8day12_Utils_v1(JNIEnv *env, jclass clazz,jint v1,jint v2) {
return v1+v2;
}
# 2 第二步:编写Java,新建一个Java类,编写静态方法
package com.justin.s8day12;
public class Utils {
public static native int v1(int a1,int a2);
}
# 3 第三步:在java类中,引入静态文件
static {
System.loadLibrary("utils");
}
# 4 第四步:在CMakeLists.txt中加入编写的c文件
add_library(
utils # 起个名字,我们叫utils
SHARED
# 指定我们新建的c文件
utils.c)
target_link_libraries(
utils# 加入我们自己写的utils,空格分割,写多个
${log-lib})
# 5 在java代码中调用
tv.setText(String.valueOf(Utils.v1(33,44)));

5.3 逆向和反编译

# 1 反编译 apk
-把咱们自己写的apk,拖动到jadx中即可
# 2 反编译so文件
-使用压缩工具把 apk解压
-进入lib的arm64-v8a目录,看到so文件
-把so文件拖动到IDA中
-选择exports导出
-双击函数名,看到汇编
-按F5,把混编进行反编译

image-20231021143431253

image-20231021143438965

image-20231021143447687

image-20231021143506606

image-20231021143512869

image-20231021143520528

posted @   hanfe1  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-10-21 Linux的bg和fg命令
点击右上角即可分享
微信分享提示