使用compileSdkVersion21编译报错,残留高版本资源文件夹求助
解决compileSdkVersion 21下高版本资源文件夹导致的aapt编译错误
首先咱们得揪出问题根源:你用的compileSdkVersion是21,但项目里的value-23、value-24、value-26文件夹里,大概率藏着API 21及以上才有的资源属性(比如android:autofillHints这类),而对应21.1.2版本的aapt工具根本认不出这些属性,直接就炸锅报错了。
给你几个针对性的解决步骤,按顺序试:
1. 先清理项目内的高版本资源文件夹
- 打开这些
value-xx文件夹,检查里面的styles.xml、colors.xml等文件,确认是不是有API 21不支持的属性。 - 如果这些文件夹是你自己项目里加的,直接删掉就行;要是第三方依赖带进来的,接着看下一步。
2. 排查依赖树,揪出隐藏的高版本依赖
有些依赖库表面说支持API 21,背地里却偷偷带了高版本资源。你可以:
- 在Android Studio右侧Gradle面板里,找到你的app模块,展开
Tasks->android,双击androidDependencies看完整依赖树; - 或者在终端敲命令:
./gradlew app:dependencies - 找到那些
compileSdkVersion高于21的依赖,要么换成适配API 21的旧版本,要么在依赖声明里排除它的高版本资源模块。
3. 升级到API 21对应的最高build-tools版本
你现在用的是21.1.2,可以试试换成21系列的最高版本(比如21.3.0),新版本的aapt对高版本资源的兼容可能更好:
android { buildToolsVersion "21.3.0" }
4. 给aapt加兼容参数(应急方案)
如果暂时没法清理高版本资源,能在app的build.gradle里给aapt加参数,强制忽略版本不兼容的资源:
android { aaptOptions { additionalParameters "--no-version-vectors" ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~" } }
核心思路就是让项目里所有资源、依赖的编译版本和你设置的21完全对齐,这样aapt就能顺利干活了。
内容的提问来源于stack exchange,提问作者Tuan Nguyen
相关产品推荐
相关产品推荐

