多文件格式
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.dex
从 classes1.dex
引用方法 foo()
,它将在 classes.dex
内的 foo()
的方法 table 中包含一个相关条目方法table。但是foo()
的实现会出现在classes1.dex
。这是有效的,因为 foo()
通常类似于应用程序使用的库的条目。可以在没有 foo
调用的所有方法的情况下使用该库的入口点。在 classes.dex
中,foo
将在没有相应代码项的情况下定义,就像它是动态链接的 Android 标准库的一部分一样。
我有兴趣了解 dex 文件 (classesN.dex
) 如何引用另一个 classesN.dex
文件中的方法。
在标准的 dex 布局中,所有 class、方法、类型等...定义都在不同的表中。动态链接的东西(例如来自 Android 框架的东西)只包含它们的方法原型,但没有代码数据。是不是在multidex设置中,每个classesN.dex包含一组class实现,而在其他dex文件中实现的方法只是以与动态链接调用相同的方式包含?
换句话说,如果classes.dex
需要引用一个方法classes1.dex
,它将将该方法作为原型包含在classes.dex
中,然后将其实现包含在[=13]中=]?
我最终解决了这个问题:事实证明,在 multidex 布局中,相关方法和 class 定义包含在每个 dex 文件中。例如,如果 classes.dex
从 classes1.dex
引用方法 foo()
,它将在 classes.dex
内的 foo()
的方法 table 中包含一个相关条目方法table。但是foo()
的实现会出现在classes1.dex
。这是有效的,因为 foo()
通常类似于应用程序使用的库的条目。可以在没有 foo
调用的所有方法的情况下使用该库的入口点。在 classes.dex
中,foo
将在没有相应代码项的情况下定义,就像它是动态链接的 Android 标准库的一部分一样。