安卓逆向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

 

posted @ 2020-04-14 02:39  凉游浅笔深画眉  阅读(268)  评论(0编辑  收藏