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