gpt4 book ai didi

Android MultiDex - 关于内部工作的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:48 26 4
gpt4 key购买 nike

我最近发现了 Android 的新 MultiDex 功能,可用于处理具有超过 65,000 个引用的应用程序。请参阅:https://developer.android.com/tools/building/multidex.html

谁能帮我理解以下问题:

1) Gradle 构建插件如何确定将什么内容放入主要 dex 文件 (classes.dex) 与次要 dex 文件?根据文档,primary dex 中需要包含某些内容,但未提供任何示例。是否所有 Activity 都需要在主 dex 文件中?

引用文本:

There are complex requirements regarding what classes are needed in the primary dex file when executing in the Dalvik runtime. The Android build tooling updates handle the Android requirements, but it is possible that other included libraries have additional dependency requirements including the use of introspection or invocation of Java methods from native code. Some libraries may not be able to be used until the multidex build tools are updated to allow you to specify classes that must be included in the primary dex file.

2) 仅针对 Android API 级别 21 (Android L) 及更高版本构建时,Gradle 构建插件中存在不同的行为。它说它要快得多,因为它“将应用程序的每个模块(包括依赖项)构建为单独的 dex 文件。这通常称为预索引。” Android中模块的定义是什么?这是这里提到的Java库、Android库和Android应用程序模块吗:http://developer.android.com/sdk/installing/studio-build.html#projectModules ?远程或本地二进制依赖项(例如:Jars)是否算作单独的模块,因此被放入不同的 dex 文件,或者它们是否包含在依赖于它们的模块中?

最佳答案

ma​​in-dex 中放置了什么?

有三个顺序任务计算哪些类应该打包到 main dex 中:

collect{variant}MultiDexComponents task

此任务根据 list 将所有应用程序组件(应用程序、 Activity 、服务、接收者、提供者)的类名写入文本文件。也就是说,如果您有一个未在 list 中注册的组件,它将不会被放置在 main-dex 中。还有其他非 list 类 - 例如注释。要查看完整列表,请查看插件源中的 CreateManifestKeepList.groovy 任务。
此任务的输出是 manifest_keep.txt 文件。

shrink{variant}MultiDexComponents task

此任务调用 ProGuard 来创建一个压缩的 jar,其中仅包含 manifest_keep.txt 文件中提到的类。
该任务的输出是 componentClasses.jar 文件。

create{variant}MainDexClassList task

此任务获取 componentClasses.jar 文件,并为每个类计算直接引用层次结构(有关更多信息,请参见 implementation)。也就是说,如果你的组件类之一有一个 X 类型的字段,那么这个 X 类也会被添加到 main-dex 列表中。
此任务的输出是 maindexlist.txt,其中包含将打包到主 dex 中的所有类的列表。

如果我的 minSdk 是 21 会怎样?

如果您的 minSdk 版本为 21,则以上任务均不会运行 - 无需计算 main-dex 列表。这是因为在 ART 中,所有的 dex 文件在应用程序安装期间都转换为单个 .oat 文件。因此不需要运行时 ClassLoader 补丁。

关于Android MultiDex - 关于内部工作的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com