Android Studio升级Gradle至3.1.2后Vector Drawable图标混乱如何解决?
我之前在升级Gradle插件到3.x版本时也碰到过一模一样的Vector图标显示异常问题,大概率是新插件对Vector Drawable的处理逻辑有变动导致的,给你几个亲测有效的解决步骤:
检查Module级build.gradle的兼容配置
确保在defaultConfig块里开启了支持库对Vector Drawable的支持,这是兼容低版本和避免解析异常的关键:android { defaultConfig { // 开启Vector Drawable支持库兼容 vectorDrawables.useSupportLibrary = true } }同时确认你的依赖里包含了AppCompat库(AndroidX环境用
androidx.appcompat:appcompat,旧支持库用com.android.support:appcompat-v7),版本建议和Gradle插件版本匹配(比如3.1.2对应27.1.1左右的支持库版本)。规范布局中Vector Drawable的引用方式
别再用android:src加载Vector图标了,改用AppCompat库提供的app:srcCompat属性,能保证在各版本系统上正确解析:<ImageView android:layout_width="24dp" android:layout_height="24dp" app:srcCompat="@drawable/your_problematic_vector" />别忘了在布局的根元素里添加
xmlns:app="http://schemas.android.com/apk/res-auto"命名空间,否则app:属性会报错。重新生成或检查Vector Drawable文件
有些旧的Vector图标可能包含不规范的SVG语法,Gradle 3.1.x对语法的校验更严格。你可以:- 用Android Studio的
File > New > Vector Asset重新导入原始SVG文件,生成规范的Vector Drawable; - 打开有问题的图标XML,检查是否有重复路径、错误的
fillType或者未定义的属性,比如自定义tint引用是否在当前主题中存在。
- 用Android Studio的
清理项目缓存并重建
有时候是Gradle缓存导致旧资源没更新,执行以下操作试试:- 点击Android Studio菜单栏的
Build > Clean Project; - 接着执行
Build > Rebuild Project; - 如果还是不行,可以手动删除项目根目录下的
.gradle文件夹和Module里的build文件夹,再重新同步项目。
- 点击Android Studio菜单栏的
AndroidX迁移相关适配(如果涉及)
要是你升级Gradle时顺便迁移到了AndroidX,得确保:gradle.properties里开启了AndroidX和Jetifier:android.useAndroidX=true android.enableJetifier=true- 所有旧支持库依赖都替换成了AndroidX对应库,比如
com.android.support:design换成com.google.android.material:material。
按这个顺序排查,基本都能解决图标混乱的问题。
内容的提问来源于stack exchange,提问作者X Fa

