minSdk升至21后Gradle仍生成矢量Drawable的PNG版本问题咨询
我太懂你的困惑了——按照官方文档的说法,API21及以上系统原生支持矢量Drawable,只要把minSdk调到21,再移除vectorDrawables.useSupportLibrary = true,AGP就不该再生成对应的PNG兼容文件了。但结合你用的AGP7.2.1和Gradle7.3.3,大概率是这几个原因在搞鬼:
AGP版本的遗留逻辑或小Bug
AGP 7.x系列虽然宣称minSdk>=21时会关闭PNG生成,但7.2.1版本可能还有没完全捋顺的地方。比如如果你的矢量图里用了嵌套引用(比如在<group>或<path>里引用了其他@drawable矢量图),或者包含了API21不支持的特性(比如某些复杂的path语法、矢量动画属性),AGP会自动触发降级逻辑生成PNG,哪怕你已经移除了兼容配置。残留的兼容代码或第三方库拖后腿
别光看主项目的build.gradle,还要检查这些细节:- 布局文件里是不是还在用
app:srcCompat而不是android:src来引用矢量图?只要用了app:srcCompat,AGP可能会默认认为你还需要支持库兼容,继续生成PNG。 - 有没有第三方依赖库在自己的build.gradle里开了
vectorDrawables.useSupportLibrary = true?AGP的配置是会传递的,第三方库的这个设置可能会让整个项目的PNG生成逻辑保持开启。
- 布局文件里是不是还在用
Gradle缓存在搞事情
增量构建的缓存有时候会“记仇”——之前生成的PNG可能还留在缓存里,哪怕你改了配置。试试执行./gradlew clean然后重新构建,说不定那些PNG就消失了。资源压缩的规则出了问题
如果你的项目开了资源压缩(shrinkResources true),去检查下res/raw/keep.xml是不是不小心把这些自动生成的PNG给保留了;或者混淆规则里有没有相关的强制保留逻辑,导致PNG没被清理掉。
另外,你可以试试把AGP升级到7.4.x或更高版本,后续版本修复了不少矢量图处理的问题,大概率能解决这个和官方文档不符的情况。
内容的提问来源于stack exchange,提问作者beigirad

