我想使用下面的API,它位于dalvik / vm / native / dalvik_system_DexFile.cpp:
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);
这些是DexFile类中相应方法的JNI实现。 它们通常在java级别调用,通过调用,例如DexFile.defineClass()方法,或者在JNI级别,通过使用普通的JNI函数来调用该java方法。
但请注意,这些方法都不是公共API的一部分,您不能依赖它们存在或具有特定原型。
如果您想加载自己的自定义类,请查看DexClassLoader类。 另外,这是一篇关于使用DexClassLoader的相关博客文章 。
以上就是c/c++开发分享如何在我的共享库中包含使用libdvm.so的正确包含文件?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519789.html