You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

minSdk升至21后Gradle仍生成矢量Drawable的PNG版本问题咨询

明明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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:37:32