我有兴趣了解 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/