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

升级Gradle与Android构建工具后AAPT样式父类资源错误如何解决?

问题原因
  • 升级后切换到AAPT2是核心诱因:AAPT2对样式父类的类型校验比旧版AAPT严格得多,它要求样式的parent必须直接指向样式资源(格式为@style/xxx),不接受间接引用属性(@android:attr/xxx)作为父类——哪怕这个属性最终指向的是样式,AAPT2也会判定类型不匹配。
  • 你的代码里parent="@android:attr/listViewStyle"是直接引用属性本身,而非属性对应的样式资源,这刚好命中了AAPT2的校验规则,导致编译报错。
解决方案

给你两种靠谱的解决方法,按需选择:

方法1:直接替换为具体的AppCompat样式

既然你用了appcompat-v7,且主题里android:listViewStyle对应的是@style/Widget.AppCompat.ListView.Menu(或者通用的@style/Widget.AppCompat.ListView),直接把parent改成这个具体样式就行:

<style parent="@style/Widget.AppCompat.ListView" name="treeViewListStyle">
    <item name="android:background">@android:color/white</item>
    <item name="android:divider">@drawable/divider</item>
</style>

这种写法最直白,完全符合AAPT2的要求,编译不会出问题。

方法2:用主题属性引用(保留主题适配性)

如果想让这个样式自动跟着当前主题里的listViewStyle配置走,别用@android:attr/,换成主题属性引用语法?android:attr/就行,AAPT2认可这种写法(它会解析成主题中该属性对应的样式):

<style parent="?android:attr/listViewStyle" name="treeViewListStyle">
    <item name="android:background">@android:color/white</item>
    <item name="android:divider">@drawable/divider</item>
</style>

这种方式能保持样式的主题关联性,适合需要适配不同主题的场景。

内容的提问来源于stack exchange,提问作者user149408

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:25:21