android - 多索引文件格式

标签 android dalvik dex android-multidex

我有兴趣了解 dex 文件 (classesN.dex) 如何引用另一个 classesN.dex 文件中的方法。

在标准 dex 布局中,所有类、方法、类型等......定义都位于不同的表中。动态链接的事物(例如来自 Android 框架的事物)仅包含其方法原型(prototype),但没有代码数据。在multidex设置中,每个classesN.dex都包含一组类实现,并且其他dex文件中实现的方法仅以与动态链接调用相同的方式包含在内,这是真的吗?

换句话说,如果 classes.dex 需要引用方法 classes1.dex,它将将该方法作为原型(prototype)包含在 classes.dex< 中,然后将其实现包含在 classes1.dex 中?

最佳答案

我最终解决了这个问题:事实证明,在 multidex 布局中,相关方法和类定义都包含在每个 dex 文件中。例如,如果 classes.dex引用方法foo()来自classes1.dex ,它将在方法表中包含 foo() 的相关条目。 classes.dex内的方法表。但执行foo()将出现在 classes1.dex 。这是有效的,因为 foo()通常类似于应用程序使用的库的条目。可以使用该库的入口点,而无需 foo 调用的所有方法。 。在 classes.dex , foo将在没有相应代码项的情况下定义,就像它是动态链接的 Android 标准库的一部分一样。

关于android - 多索引文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257850/

相关文章:

java - 了解 Dalvik 代码的反汇编?

java - 当版本低于 Lollipop 时 INSTALL_FAILED_DEXOPT

Android - 无法从 4.2.2 上的相机 Intent 获取图像

android - ListView 项目背景颜色在滚动时发生变化,

android - TestScope 在协程测试中的高级使用示例

java - 在 Android 应用程序中使用受 Java 启发的语言

android - Graphhopper 演示 Apk 错误

android - 在 Android 中执行 Dalvik 堆限制时是否计算共享内存?

java - 从 Android Java 进程中获取或创建上下文

android - Android 5.0动态加载DEX文件