安卓逆向4.Android Studio之JNI静态注册

1.新建一个安卓项目,名称为:JniStaticTest

2.在MainActivity中创建一个名为TestGetInt的native方法

3.来到JniStaticTest\app\src\main\java目录下,我们能看到有个com文件夹。这一步需要注意,路径不能出错!

4.打开CMD窗口,并且切换到步骤3所示的路径下,输入:javah -jni com.crackme.jnistatictest.MainActivity

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 jint JNICALL Java_com_crackme_jnistatictest_MainActivity_TestGetInt(JNIEnv *, jobject)
{
   return 123456;
}

 

 

8.在Jni文件夹下添加Android.mk文件,并插入以下代码:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestJniStatic
LOCAL_SRC_FILES =: TestJniStatic.cpp
include $(BUILD_SHARED_LIBRARY)

9.在Jni文件夹下添加Application.mk文件,并插入以下代码:
APP_ABI := x86 armeabi-v7a

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.运行测试效果

 

猜你喜欢

转载自www.cnblogs.com/fuhua/p/12695436.html
今日推荐