1下载NDK
。。。。。。。。。。。。。。。
2配置
local.properties 文件中加入
ndk.dir=E\:\\android_sdk\\ndk\\android-ndk-r22
3创建JNI目录
4 创建 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := jnidemo.cpp //你编写的c文件
LOCAL_MODULE := xl //编译之后生成的so文件名
include $(BUILD_SHARED_LIBRARY)
5 创建 Application.mk
APP_PLATFORM := android-16
APP_ABI :=all
AndroidManifest.xml文件中加入
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="30"></uses-sdk>
6 创建本地方法
public class JniDemo { public static native String getString(); }
7 生成头文件
查看手机架构 adb shell getprop ro.product.cpu.abi
- 执行javah:
- 进入app/src/main目录:cd app/src/main
- 执行javah命令:javah
javah -d jni -classpath ./Java com.it.myapplication.JniDemo
-d jni 头文件生成到jni文件夹(当前在<Project>\app\src\main目录下,所以.h所在的目录为<Project>\app\src\main\jni )
8 复制生成的头文件 更改为jnidemo.cpp cd jni 执行 ndk-build 生成 so库
9测试 build配置
android { defaultConfig { ndk { //moduleName "JniLib" abiFilters "armeabi-v7a","arm64-v8a" //输出指定abi下的so库 } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } }
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("xl"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String name=new JniDemo().getString(); Log.e("===",name+"------------------------------"); Toast.makeText(this, "--"+name, Toast.LENGTH_SHORT).show(); } //创建本地方法 public native String showData(); }