1.写一个类作为native方法调用入口
package com.example.com.example.myapplication;
public class NativeLib {
static {
System.loadLibrary("native-lib");
}
public static native int calculateSum(int a, int b);
}
2.写native方法的实际逻辑(以加法为例)
#include <jni.h>
extern "C"
JNIEXPORT jint JNICALL
Java_com_example_com_example_myapplication_NativeLib_calculateSum(JNIEnv *env, jclass clazz, jint a,
jint b) {
// TODO: implement calculateSum()
return a + b;
}
3.创建CMAKELists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib SHARED native-lib.cpp)
4.配置当前项目build.gradle
defaultConfig {
applicationId "com.example.myapplication"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
ndk {
abiFilters "arm64-v8a"
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.22.1"
}
}
5.正常调用
binding.fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
int res = NativeLib.calculateSum(1,3);
Log.d("zhangshuai","res = "+res);
}
});
ps:文件目录结构
另外,也可参考