【问题标题】:JNI function table - functions' implementation in Dalvik source codeJNI 函数表 - Dalvik 源代码中的函数实现
【发布时间】:2011-08-20 16:40:41
【问题描述】:

我正在尝试找到 Dalvik 的 interperter 循环的入口点。

我已经阅读了 Android (2.1 froyo) 启动代码,直到调用了“env->CallStaticVoidMethod()”。这意味着“开始在 Dalvik 中运行 JAVA 静态 void 方法”。在我的例子中,指定的方法是 ZygoteInit 的 main 方法。

但是,我在代码中的任何地方都找不到此入口方法(“CallStaticVoidMethod”)的 c/cpp 实现 - 只有引用和声明。

所有其他解释器入口点也是如此 - CallObjectMethod、CallBooleanMethod 等...

在源代码的 dalvik/vm/Jni.c 文件中,有一个全局变量 gNativeInterface 保存了指向所有这些函数的指针。它是用我找不到定义的符号初始化的(我怀疑这是因为使用了一些宏来定义它们)。

首先感谢所有回复者。

【问题讨论】:

    标签: android java-native-interface interpreter dalvik


    【解决方案1】:

    CallStaticVoidMethod() 是通过dalvik/vm/Jni.c 中的宏实现的 (一个头文件首先将CallStaticVoidMethod映射到CallStaticVoideMethodV)

    2893 /*
    2894  * Call a static method.
    2895  */
    2896 #define CALL_STATIC(_ctype, _jname, _retfail, _retok, _isref)               \
    
    2912     static _ctype CallStatic##_jname##MethodV(JNIEnv* env, jclass jclazz,   \
    2913         jmethodID methodID, va_list args)                                   \
    2914     {                                                                       \
    2915         UNUSED_PARAMETER(jclazz);                                           \
    2916         JNI_ENTER();                                                        \
    2917         JValue result;                                                      \
    2918         dvmCallMethodV(_self, (Method*)methodID, NULL, true, &result, args);\
    2919         if (_isref && !dvmCheckException(_self))                            \
    2920             result.l = addLocalReference(env, result.l);                    \
    2921         JNI_EXIT();                                                         \
    2922         return _retok;                                                      \
    2923     }                                                                    
    
    2945 CALL_STATIC(void, Void, , , false);
    

    dvmCallMethodV在davlik/vm/interp/Stack.c中实现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多