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