将compileSdkVersion与targetSdkVersion从25改为23后遇资源找不到错误
嘿,我之前也踩过这个坑,这问题根源其实很清楚——你提到的那两个TextAppearance样式是Android 7.0(API 24)才新增的系统资源,而你现在把compileSdk和targetSdk降到了23(Android 6.0),系统里根本没有这些高版本样式,自然会抛出资源找不到、链接失败的错误。
给你几个实用的解决方案,按需挑选:
检查代码/布局的直接引用
如果是你自己的布局文件或样式里直接用了android:style/TextAppearance.Material.Widget.Button.Borderless.Colored或android:style/TextAppearance.Material.Widget.Button.Colored,直接替换成API 23支持的样式就行。比如换成TextAppearance.Material.Widget.Button或者TextAppearance.Material.Widget.Button.Borderless,要是需要特定文字颜色,自己在样式里加android:textColor属性自定义就好。排查第三方依赖库
很多时候这种问题是第三方库搞出来的——有些库默认依赖了高版本的系统样式。你可以执行gradle命令查看项目依赖树:./gradlew app:dependencies定位到哪个库引入了高版本资源后,要么:
- 替换为兼容API 23的库版本;
- 如果是Android Support库(你用23的话应该还是Support库体系),确保所有Support库的版本都和compileSdkVersion一致,比如统一用
23.4.0,绝对不能混用高于23的版本。
自定义缺失的样式
如果你必须保留这些样式的视觉效果,可以在项目的res/values/styles.xml里手动复刻这两个样式,模仿高版本系统的效果:<style name="TextAppearance.Material.Widget.Button.Borderless.Colored" parent="TextAppearance.Material.Widget.Button.Borderless"> <item name="android:textColor">?attr/colorAccent</item> </style> <style name="TextAppearance.Material.Widget.Button.Colored" parent="TextAppearance.Material.Widget.Button"> <item name="android:textColor">?attr/colorAccent</item> </style>这样编译时就会优先使用你自定义的样式,不会再去找系统里不存在的资源了。
最后别忘了执行Clean Project然后Rebuild Project,有时候Gradle缓存会残留旧的资源引用,清理后重建能解决不少奇怪的小问题。
内容的提问来源于stack exchange,提问作者Varun Naharia

