Android JNI与Jav​​a JNI规范冲突

时间:2017-04-11 09:15:12

标签: java android java-native-interface dalvik art-runtime

根据Java JNI规范Native Method Arguments

  

JNI接口指针是本机方法的第一个参数。该   JNI接口指针的类型为JNIEnv。 第二个参数不同   取决于本机方法是静态还是非静态方法。该   非静态本机方法的第二个参数是对它的引用   宾语。静态本机方法的第二个参数是引用   到它的Java类。

因此,本机函数实现应包含至少两个本地参数:第一个是 JNIEnv ,第二个是 jobject jclass ,但在android中框架有许多代码与这些规则相混淆,例如:

android.googlesource.com/platform/frameworks/base / + / cd92588 / media / java / android / media / MediaScanner.java#1822

private static native final void native_init();

android.googlesource.com/platform/frameworks/base / + /主/媒体/ JNI / android_media_MediaScanner.cpp#375

static void android_media_MediaScanner_native_init(JNIEnv *env)
{
    ALOGV("native_init");
    jclass clazz = env->FindClass(kClassMediaScanner);
    if (clazz == NULL) {
        return;
    }

  fields.context = env->GetFieldID(clazz, "mNativeContext", "J");
    if (fields.context == NULL) {
        return;
    }
}

功能注册:

{
    "native_init",
    "()V",
    (void *)android_media_MediaScanner_native_init
},

android_media_MediaScanner_native_init只接收一个参数,那么是否有任何dalvik或艺术运行时技巧或其他原因?

0 个答案:

没有答案