day11-JNI介绍
四 JNI介绍和安装
4.1 JNI介绍
JNI,java native interface ,Java本地开发接口,实现在安卓中JAVA和C语言之间的相互调用。
# 之前写安卓,全是用java写
# 后期可以用c写安卓,写了后,需要使用java调用c的方法,完成功能
4.2 NDK安装
NDK是JNI开发的工具包
NDK,Native Develop Kits,本地开发工具(在Android Studio中下载即可)
五 创建JNI项目
# 普通项目:Empty Activity(Java)
# jni项目:Native C++(Java + C)
创建的项目多了一些内容和配置(基于C++实现了一个算法,并在Java中进行了调用)。
- 有了默认配置后,我们就不需要自己的手动配置了。
- 会生成一些我们用不到的默认文件,等我们学会自己再回来删除他默认的这些文件。
5.1 创建项目
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,把混编进行反编译