android - 使用 jniRegisterNativeMethods 在带有 Kotlin 的 Android Studio 中注册方法而不是长 JNI 名称?
问题描述
有没有办法jniRegisterNativeMethods
在 NDK 应用程序中映射 JNI 函数?即使用a通过method_table
JNI映射本机(C/C++) 函数,而不是使用长得离谱的JNI 方法名称?
例如,在我看到的一个练习中,它自己的平台上添加了一个 C 文件,
#include "core_jni_helpers.h"
#include "jni.h"
static jlong init_native(JNIEnv *env, jobject clazz)
{
return 0;
}
// ...
static JNINativeMethod method_table[] = {
{ "init_native", "()J", (void*)init_native },
{ "finalize_native", "(J)V", (void*)finalize_native },
// ...
};
int register_android_server_ExampleService(JNIEnv *env)
{
return jniRegisterNativeMethods(env, "com/android/server/OpersysService",
method_table, NELEM(method_table));
};
但是随后register_android_server_ExampleService
被手动调用services/core/jni/onload.cpp
(在平台上)
有什么方法可以做到这一点或与 NDK 类似吗?
我的猜测是否定的,因为NDKJNIHelp.h
中core_jni_helpers.h
不可用,而且 Android Studio 中的 Kotlin 工具可能无法运行函数来执行自动完成。但是我认为在小情况下值得一问,我可以以某种方式避免命名函数,例如Java_vendor_<name>_<name>_<name>_test_MainActivity_stringFromJNI
解决方案
推荐阅读
- java - 为什么我的 SharedPreferences 在应用程序启动后没有立即加载?
- jenkins - 如果 master 发生变化,Jenkins 会触发作业,尽管另有配置
- checksum - 逆向工程“校验和”生成
- javascript - Vanilla Javascript:.forEach 循环未应用事件侦听器
- reactjs - 使用自动建议渲染和显示选择
- python - 如何从数据框中获取特定行,而不是查看我的条件是真还是假?
- jdbc - ComboPooledDataSource(c3p0) 中的 clientProgramName 等效属性
- ruby - ruby 强制整数和字符串
- windows - 在 Cmdlet 或程序调用中以 - (破折号)开头的转义 Powershell 变量?
- ssis - SSIS Odata 连接成功但未加载集合,SSDT 2017