我正试图找到Dalvik的interperter循环的入口点。
我已经阅读了Android(2.1 froyo)启动代码,直至调用“env-> CallStaticVoidMethod()”。这意味着“开始在Dalvik中运行JAVA静态void方法”。在我的例子中,指定的方法是ZygoteInit的主要方法。
但是,我无法在代码中的任何地方找到此入口方法(“CallStaticVoidMethod”)的c / cpp实现 - 仅引用和删除。
所有其他解释器入口点也是如此 - CallObjectMethod,CallBooleanMethod等......
在源代码的文件dalvik / vm / Jni.c中,有一个全局变量gNativeInterface,它保存了指向所有这些函数的指针。它用符号初始化,我找不到定义(我怀疑这是因为使用了一些宏来定义它们)。
首先感谢所有回复者。
答案 0 :(得分:2)
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
中实施