安卓逆向4.Android Studio JNI静态注册(一个简单的JNI静态注册流程)
1.新建一个安卓项目,名称为:JniStaticTest
2.在MainActivity中创建一个名为SayHello的native方法
3.来到JniStaticTest\app\src\main\java目录下,我们能看到有个com文件夹。这一步需要注意,路径不能出错!
4.打开CMD窗口,并且切换到步骤3所示的路径下,输入:javah -jni com.crackme.jnistatictest.MainActivity
注意:如果上述操作完全没错,但依然提示找不到xxx的类文件!需要先使用命令set classpath=JniStaticTest\app\src\main\java来进行切换。
5.成功后回到Android Studio项目面板,能看到生成了一个com_crackme_jnistatictest_MainActivity.h文件
6.在项目中创建一个名叫jni的文件夹(如下图所示,文件夹路径和名称都必须正确才行),并且将步骤5生成的.h头文件移动到jni文件夹下
7.在Jni文件夹下新建一个TestJniStatic.cpp的文件,并写入如下代码(需要注意的是导出函数的声明必须和.h头文件的一致):
#include "com_crackme_jnistatictest_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_crackme_jnistatictest_MainActivity_SayHello(JNIEnv * env, jobject) { return env->NewStringUTF("Hello World"); }
8.在Jni文件夹下添加Android.mk文件,并插入以下代码:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #会清理除了LOCAL_PATH歪的其他LOCAL文件路径 LOCAL_ARM_MODE := arm #模块指令集 LOCAL_MODULE := TestJniStatic #模块名称 LOCAL_SRC_FILES := TestJniStatic.cpp #源文件名 include $(BUILD_SHARED_LIBRARY) #编译为So库文件
9.在Jni文件夹下添加Application.mk文件,并插入以下代码:
APP_ABI := armeabi-v7a x86
10.在cmd窗口中切换到Jni目录下,并执行ndk-build命令
11.ndk-build命令执行成功后,项目中的libs目录下能看到生成了so库文件
12.在App文件夹下的build.gradle文件里,找到defaultConfig项,在其项里添加如下代码(必须,否则会导致LoadLibrary时加载失败):
ndk { moduleName "TestJniStatic" } sourceSets.main { jni.srcDirs = [] jniLibs.srcDir "src/main/libs" }
13.回到MainActivity中新增如下两断代码(注意:LoadLibrary中的模块名称必须去头去尾,否则无法加载成功!):
14.运行测试效果
源文件下载地址:
链接:https://pan.baidu.com/s/103h8dksZ8WQhI9WahQXbsQ
提取码:gmp4