【问题标题】:How does resConfigs work in android (gradle)?resConfigs 如何在 android (gradle) 中工作?
【发布时间】:2021-03-16 18:52:53
【问题描述】:

缺乏关于 gradle 方法 resConfigs 的适当文档让我问了这个问题。

官方文档:

  • this例子中,google给出了具体的使用例子 与语言。
  • this 示例中,google 混合语言和 可绘制对象
  • 我找不到任何 javadoc 像 gradle doc 一样

我的(大部分是错误的)理解:

如果我在 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 之外的所有可绘制对象都消失了。

问题:

  1. 当我只指定语言 resConfigs="en", "fr" 时,为什么其他资源会被捆绑到 apk 中(例如:drawables)
  2. 类似,当我只指定 resConfigs="xxhdpi" 时,为什么要捆绑语言和其他资源
  3. 如果 gradle 使用一些智能来确定要排除和不排除的内容,是否存在属于同一类别的一组资源列表,是否有任何文档?
    例如
    • 语言是一个组,如果 gradle 找到至少一个语言标签,它会排除所有其他语言。否则,包括所有语言?
    • Drawable 是一个组,如果 gradle 找到至少一个 drawable 标签,它将排除所有其他 drawable。否则,包括所有可绘制对象?

相关问题:

  1. resConfigs 仅在应用级别 gradle 上为我工作。当我尝试在依赖模块上使用它时,它完全忽略了它。如何使其在依赖模块上工作。 (我试图整合firebaseUI for auth
  2. resConfigs 处于开发的早期阶段,还是仅用于开发目的,不用于产品设置?

【问题讨论】:

  • resConfigs 在 gradle 的 Android 插件中定义。您可以找到文档 API available here,但没什么特别的。它似乎适用于qualifiers

标签: android android-studio kotlin gradle build


【解决方案1】:

有几点需要注意

  • resConfigs 与资源限定符组一起使用
  • 资源限定符分组在不同的存储桶中,例如语言、dpi、平台版本等。

当您向 resConfigs 提供资源限定符时,该存储桶中用于限定符的所有其他资源都将被删除。其他存储桶中的资源不受影响。

请参阅以下链接了解所有可用的分组/存储桶。 https://developer.android.com/guide/topics/resources/providing-resources#AlternativeResources

希望这是有道理的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2013-10-06
  • 2021-03-25
  • 2016-06-26
相关资源
最近更新 更多