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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM