我想使用以下位于 dalvik/vm/native/dalvik_system_DexFile.cpp 的 API:
static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args, JValue* pResult)
static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args, JValue* pResult)
但我不知道如何在 libdvm.so 中包含正确的包含文件以使用上述两个 API。
我试图在 android 项目中包含整个标头,但它失败并显示此编译错误消息:“参数列表太长”。
有人知道在 libdvm.so 中使用上述两个 API 应该怎么做吗?谢谢你。
- 添加 -
在 dalvik/vm/native/dalvik_system_DexFile.cpp 中,有一些额外的代码允许其他人使用静态 API。
const DalvikNativeMethod dvm_dalvik_system_DexFile[] =
{
{ "openDexFile", "(Ljava/lang/String;Ljava/lang/String;I)I", Dalvik_dalvik_system_DexFile_openDexFile },
{ "openDexFile", "([B)I", Dalvik_dalvik_system_DexFile_openDexFile_bytearray },
{ "closeDexFile", "(I)V", Dalvik_dalvik_system_DexFile_closeDexFile },
{ "defineClass", "Ljava/lang/String;Ljava/lang/ClassLoader;I)Ljava/lang/Class;", Dalvik_dalvik_system_DexFile_defineClass },
{ "getClassNameList", "(I)[Ljava/lang/String;", Dalvik_dalvik_system_DexFile_getClassNameList },
{ "isDexOptNeeded", "(Ljava/lang/String;)Z", Dalvik_dalvik_system_DexFile_isDexOptNeeded },
{ NULL, NULL, NULL },
};
我将像这样调用上面的 2 个静态 API:
dvm_dalvik_system_DexFile[1].fnPtr(args, &pResult);