首页 > 解决方案 > 使用 jniRegisterNativeMethods 在带有 Kotlin 的 Android Studio 中注册方法而不是长 JNI 名称?

问题描述

有没有办法jniRegisterNativeMethods在 NDK 应用程序中映射 JNI 函数?使用a通过method_tableJNI映射本机(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.hcore_jni_helpers.h不可用,而且 Android Studio 中的 Kotlin 工具可能无法运行函数来执行自动完成。但是我认为在小情况下值得一问,我可以以某种方式避免命名函数,例如Java_vendor_<name>_<name>_<name>_test_MainActivity_stringFromJNI

标签: androidandroid-ndkjnienv

解决方案


推荐阅读