resConfigs 在 android (gradle) 中如何工作?
How does resConfigs work in android (gradle)?
缺少关于 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 使用资源限定符组
- 资源限定符分组在不同的桶中,如语言、dpi、平台版本等。
当您向 resConfigs 提供资源限定符时,该存储桶中限定符的所有其他资源都将被删除。其他桶中的资源不受影响。
所有可用的grouping/buckets请参考以下link。
https://developer.android.com/guide/topics/resources/providing-resources#AlternativeResources
希望这是有道理的。
缺少关于 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 使用资源限定符组
- 资源限定符分组在不同的桶中,如语言、dpi、平台版本等。
当您向 resConfigs 提供资源限定符时,该存储桶中限定符的所有其他资源都将被删除。其他桶中的资源不受影响。
所有可用的grouping/buckets请参考以下link。 https://developer.android.com/guide/topics/resources/providing-resources#AlternativeResources
希望这是有道理的。