【发布时间】:2021-03-16 18:52:53
【问题描述】:
缺乏关于 gradle 方法 resConfigs 的适当文档让我问了这个问题。
官方文档:
我的(大部分是错误的)理解:
如果我在 resConfigs 前面指定了某些内容,则只有该内容会包含在最终构建中,其他所有内容都不会捆绑到 apk 中。
Android 应用设置
测试应用有
- 多种语言(values-en、values-fr、...)
- 多个可绘制文件夹(drawable-xxhdpi、drawable-xxxhdpi、...)
- 多个 android 版本(values-v21、values-v7、...)
- 多个最小宽度(sw800、sw1000、...)
- 多方位(港口、陆地)
- 等
我的测试观察
注意:我使用 android studios 的 apk 分析器推导出以下结果。在每次测试之前,都会在启用 proguard(shrink) 的情况下生成完全清理、重建和产品构建。
测试 1:
我只指定了语言resConfigs="en", "fr"
结果 1: 在apk中,
- 除 en 和 fr 之外的所有语言都消失了
- 所有其他资源都存在(drawables、dimens、sw、orientation ...)
测试 2:
我只指定了drawables resConfigs="xxhdpi"
结果 2: 在apk中,
- 所有语言都存在
- 所有其他资源都存在(尺寸、软件、方向...)
- 除 xxhdpi 之外的所有可绘制对象都消失了。 (所有其他可绘制文件夹都存在,但文件为 0 字节)
测试 3:
我指定了语言和可绘制resConfigs="en","fr","xxhdpi"
结果 3: 在apk中,
- 除 en 和 fr 之外的所有语言都消失了
- 所有其他资源都存在(尺寸、软件、方向...)
- 除 xxhdpi 之外的所有可绘制对象都消失了。
问题:
- 当我只指定语言
resConfigs="en", "fr"时,为什么其他资源会被捆绑到 apk 中(例如:drawables) - 类似,当我只指定
resConfigs="xxhdpi"时,为什么要捆绑语言和其他资源 - 如果 gradle 使用一些智能来确定要排除和不排除的内容,是否存在属于同一类别的一组资源列表,是否有任何文档?
例如- 语言是一个组,如果 gradle 找到至少一个语言标签,它会排除所有其他语言。否则,包括所有语言?
- Drawable 是一个组,如果 gradle 找到至少一个 drawable 标签,它将排除所有其他 drawable。否则,包括所有可绘制对象?
相关问题:
-
resConfigs仅在应用级别 gradle 上为我工作。当我尝试在依赖模块上使用它时,它完全忽略了它。如何使其在依赖模块上工作。 (我试图整合firebaseUI for auth) -
resConfigs处于开发的早期阶段,还是仅用于开发目的,不用于产品设置?
【问题讨论】:
-
resConfigs在 gradle 的 Android 插件中定义。您可以找到文档 API available here,但没什么特别的。它似乎适用于qualifiers
标签: android android-studio kotlin gradle build