Android product flavour构建未正确加载同名drawable资源怎么办
问题根源
Android资源加载时的优先级规则是 资源限定符匹配度 > 来源集(sourceset)优先级,你遇到的问题就是这个规则导致的:
- 构建flavor版本时,虽然flavor来源集的优先级高于main来源集,但系统优先匹配和设备当前密度完全对应的限定符资源
- main目录下的
image.png带有具体密度限定符(hdpi/xhdpi等),和运行设备的密度匹配度远高于flavor目录下无任何密度限定符的drawable/image.xml,所以会优先加载main下的PNG资源
解决方案
你可以任选以下一种方案实现需求:
方案1(推荐,适配所有密度)
将flavor目录下的矢量图image.xml移动到flavor/res/drawable-anydpi/目录下。drawable-anydpi是系统最高优先级的密度限定符,优先级高于所有具体密度的限定符,只要该目录下存在同名资源,就会优先加载,完美适配矢量图自适应密度的特性,同时不会影响main下的PNG资源给其他风味使用。
方案2(保持目录结构,修改main下资源配置)
如果不需要为PNG做分密度适配,你可以将main下的所有PNG资源统一放到main/res/drawable/无密度限定符目录下,此时flavor和main下的资源限定符匹配度相同,系统会按sourceset优先级优先加载flavor下的矢量图。
注意:请确认你的build.gradle中配置的productFlavor名称和资源目录的flavor文件夹名称完全一致,大小写敏感。
验证方式
修改后构建flavor版本,打开Android Studio的 Build -> Analyze APK 功能,选中构建出的APK查看res/drawable相关目录下的资源,确认最终打包的是你期望的矢量图资源即可,无需修改Compose侧的Image组件代码。
内容的提问来源于stack exchange,提问作者SmallGrammer
相关产品推荐
相关产品推荐

