我在我的 bazel 构建文件中创建了一个 cc_library 并在 android_binary 规则中添加了 deps
巴泽尔建造:
cc_library(
name = "native_libs",
srcs = glob([
"app/src/main/jni/**/*.cc",
"app/src/main/jni/**/*.h",
]),
)
android_binary(
name = "buildlib",
srcs = glob([
"app/src/main/java/**/*.java",
]),
manifest = "app/src/main/AndroidManifest.xml",
deps = ":native_libs",
)
并将指定包中的库加载为
static{
System.loadLibrary("buildlib");}
并将本机函数声明并调用为:
宣言:
private static native String foo(String code);
函数调用
foo("Code");
JNI文件函数声明及定义:
JNIEXPORT jstring JNICALL
Java_com_example_android_(foo)( JNIEnv* env, jobject thiz, jstring code );
JNIEXPORT jstring JNICALL
Java_com_example_android_(foo)( JNIEnv* env, jobject thiz, jstring code )
{
//some code
return code;
}
库成功加载,但函数调用抛出错误java.lang.UnsatisfiedLinkError
如何从我的 java 文件中调用本机 foo()?