多文件格式

Multidex file format

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

在标准的 dex 布局中,所有 class、方法、类型等...定义都在不同的表中。动态链接的东西(例如来自 Android 框架的东西)只包含它们的方法原型,但没有代码数据。是不是在multidex设置中,每个classesN.dex包含一组class实现,而在其他dex文件中实现的方法只是以与动态链接调用相同的方式包含?

换句话说,如果classes.dex需要引用一个方法classes1.dex,它将将该方法作为原型包含在classes.dex中,然后将其实现包含在[=13]中=]?

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