AndroidStudio升级后编译项目出现Aapt2Exception异常的问题解决方案

本文介绍了解决Android Studio升级后新建项目时出现的AAPT2编译错误的方法。错误源于Gradle缓存目录含有中文名。提供两种解决方案:禁用AAPT2或更改Gradle用户目录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

AndroidStudio升级后,打开旧项目没问题,但是新建项目编译会报错:Errorcom.android.tools.aapt2.Aapt2Exception AAPT2 error check logs for details,查看gradle log,报错信息如下图(其实那些资源文件都是可以找到的)


问题定位

根据网上查找的资料,在Google gradle插件升级到3.0之后(Google Gradle插件在项目根目录下的build.gradle中引入,参考下图),就默认启用了appt2,这么做是为了加快编译的速度,但是如果你的Gradle缓存目录(一般在用户目录下,C:\Users\用户名\.gradle)中含有中文名称,那么就悲剧了,会出现上面的问题。个人总结原因是:Android Gradle 3.0之后对gradle缓存目录中的中文目录支持存在问题,所以导致了这样的错误。


解决方案

方案一:不使用appt2

在项目根目录下的gradle.properties文件(如果没有,新建)中添加以下配置:
android.enableAapt2=false
清理项目,重新编译,问题解决。

方案二:修改Gradle用户目录(推荐)

Android Studio中菜单栏,File->Settings,打开Gradle标签,修改Service directory path,将这个目录指定到一个没有中文目录的文件夹中,清理项目,重新编译,问题解决。

总结

虽然解决方案有两个,但是个人推荐使用方案二,方案一只是临时解决了当前项目,以后新建项目都需要进行配置;方案二修改了配置后,以后新建项目都不会出现这样的问题。在使用Android的过程中,已经出现过多个中错误都是对中文目录支持问题导致的,所以这次的错误解决,也让我想到了方案二这个解决办法,希望对大家有用。

    以上的方案也不是万能,虽然能解决掉AndroidStudio编译项目出现的报错问题,但是直接在命令行中运行gradle命令编译项目的时候,还是会报错。所以对于一个开发者来说,为了避免不必要的麻烦,还是希望在配置新电脑或在旧电脑中添加新用户的时候,千万别使用中文用户名。

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01 Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01 Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01 注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: D:\WorkSpace\TavernWars2020_4399_Android\client\UnityProject\Temp\gradleOut\unityLibrary\src\main\java\com\unity3d\player\UnityPlayerActivity.java使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':launcher:processReleaseResources'. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade > Android resource linking failed C:\Users\姜鹏\.gradle\caches\transforms-2\files-2.1\18397abbc229bedff14257f78e687686\kssdk-ad-3.3.67.1\res\values\values.xml:310:5-316:11: AAPT: error: style attribute 'attr/colorPrimary (aka game.taptap.tavernwars2:attr/colorPrimary)' not found. C:\Users\姜鹏\.gradle\caches\transforms-2\files-2.1\18397abbc229bedff14257f78e687686\kssdk-ad-3.3.67.1\res\values\values.xml:310:5-316:11: AAPT: error: style attribute 'attr/colorPrimaryDark (aka game.taptap.tavernwars2:attr/colorPrimaryDark)' not found. C:\Users\姜鹏\.gradle\caches\transforms-2\files-2.1\18397abbc229bedff14257f78e687686\kssdk-ad-3.3.67.1\res\values\values.xml:310:5-316:11: AAPT: error: st
03-13
<think>好的,我现在要解决用户在构建Android项目时遇到的错误,具体是'attr/colorPrimary'和'attr/colorPrimaryDark'样式属性未找到,导致AAPT错误和任务':launcher:processReleaseResources'执行失败。首先,我需要分析可能的原因,然后逐步排查解决方案。 首先,用户提到的错误信息涉及资源链接问题,通常是AAPTAndroid Asset Packaging Tool)在处理资源时发现了缺失的属性。这两个属性colorPrimary和colorPrimaryDark是Material Design主题中常用的属性,通常定义在主题的样式文件中。如果项目中的主题引用了这些属性,但当前使用的主题或支持库版本不包含它们,就会导致这个错误。 接下来,我需要考虑可能的原因。首先,可能是Gradle依赖库版本不兼容。如果项目使用的AppCompat库或Material Design库版本过低,可能不支持这些属性。用户之前提到过依赖包版本4.7.1可能引用了androidx库,需要回退到支持android库的版本。这时候,我需要确认哪个版本是合适的。根据经验,AppCompat库在版本26及以上开始迁移到androidx,所以如果项目还在使用android支持库而不是androidx,可能需要使用25.x.x或更旧的版本。例如,com.android.support:appcompat-v7:25.4.0可能是一个可行的选择。但需要用户确认是否整个项目使用的是支持库而非androidx,否则混用可能导致冲突。 其次,可能的问题是主题定义不正确。用户可能在styles.xml中使用了Theme.MaterialComponents.DayNight这样的主题,但对应的库没有正确引入。这时候需要检查build.gradle中是否添加了正确的Material Design库依赖,例如com.google.android.material:material:1.x.x。 另外,资源合并冲突也可能导致某些属性丢失。需要检查是否有其他模块或第三方库引入了冲突的资源文件,覆盖了原本的属性定义。这时候可能需要检查依赖树,排除冲突的库,或者使用资源前缀来避免冲突。 还有一种可能是Android Gradle Plugin版本与依赖库版本不兼容。例如,较新的AGP版本可能需要使用androidx库,而旧版本可能支持支持库。用户提到升级到Flutter 1.12后出现问题,可能需要检查Flutter插件和Gradle版本的兼容性,确保AGP版本与项目配置一致。 然后,用户提供的引用信息中,引用[3]提到依赖包版本4.7.1可能需要回退。这里需要确定具体的依赖包是什么。例如,如果是指com.android.tools.build:gradle版本,4.7.1可能对应的是Android Gradle Plugin 7.0.x,但不确定。需要用户澄清,但假设是某个第三方库,可能需要回退到支持android支持库的版本。例如,如果某个库的4.7.1版本迁移到了androidx,而项目还在使用支持库,那么回退到4.7.0或更早的版本可能解决问题。 针对用户的错误,建议的解决步骤可能包括: 1. 检查项目的主题样式文件(如res/values/styles.xml),确认使用的父主题是否正确,是否引用了存在的属性。例如,是否错误地使用了Theme.MaterialComponents而不是Theme.AppCompat。 2. 确保在build.gradle中正确引入了AppCompat库或Material Design库。例如: implementation 'com.android.support:appcompat-v7:25.4.0' 或者如果使用androidx: implementation 'androidx.appcompat:appcompat:1.3.0' 3. 如果项目仍在使用支持库,需要将所有依赖库统一为支持库版本,避免androidx和支持库混用。可能需要回退某些依赖库的版本到支持库兼容的版本,如引用[3]中的问题,将4.7.1回退到如4.6.0或其他版本。 4. 检查Android Gradle Plugin版本是否与项目配置兼容。在项目的build.gradle中,查看classpath 'com.android.tools.build:gradle:x.x.x'的版本,确保与Gradle版本匹配,并支持当前的项目结构。 5. 执行清理和重建操作,有时候临时文件可能导致资源链接错误。使用./gradlew clean assembleRelease来清理并重新构建。 6. 如果问题依旧,可以尝试检查合并后的资源文件,使用Android Studio的Resource Manager查看是否存在冲突或缺失的属性,或者运行./gradlew processReleaseResources --stacktrace来获取更详细的错误信息。 在用户的具体情况中,假设他们错误地迁移到了androidx,但部分库仍在使用支持库,或者反之。例如,colorPrimary和colorPrimaryDark在AppCompat中从版本21开始引入,如果用户的主题继承自Theme.AppCompat,而对应的库未正确引入,就会报错。或者,如果用户使用了Material Components主题,但未添加对应的Material库依赖,也会导致问题。 另外,用户提到的Flutter升级到1.12后出现问题,可能需要检查Flutter项目android/local.properties和gradle-wrapper.properties中的Gradle版本是否匹配,以及Flutter插件是否与Android Gradle Plugin版本兼容。例如,某些Flutter版本可能需要特定的AGP版本,否则会导致资源处理错误。 总结解决方案步骤: 1. 确认主题样式是否正确引用了可用的父主题,并确保对应的依赖库存在。 2. 统一依赖库的命名空间,避免androidx和支持库混用,必要时回退库版本。 3. 更新或调整Gradle插件和Gradle版本,确保兼容性。 4. 清理和重建项目,检查详细错误日志。 最后,生成相关问题,帮助用户进一步排查类似问题。</think>### 解决 Android 构建失败问题:'attr/colorPrimary' 和 'attr/colorPrimaryDark' 未找到 #### 问题原因 该错误通常由以下原因导致: 1. **主题属性未正确定义**:`colorPrimary` 和 `colorPrimaryDark` 是 Material Design 主题属性,若未正确引入相关依赖库或主题继承关系错误,会导致 AAPT 无法解析[^1][^2]。 2. **依赖库版本冲突**:项目可能混用了 `androidx` 和旧版 `android` 支持库,或第三方库版本不兼容[^3][^4]。 3. **资源合并冲突**:多模块或第三方库的资源文件覆盖了关键属性。 --- #### 逐步解决方案 1. **检查并修正主题定义** - 在 `res/values/styles.xml` 中,确认父主题是否正确: ```xml <!-- 使用 AppCompat 主题 --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primaryDark</item> </style> ``` - 若使用 Material Components,需确保引入对应库。 2. **统一依赖库版本** - 在 `build.gradle` 中,**避免混用 `androidx` 和 `support` 库**: ```groovy // 使用 androidx 库 implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'com.google.android.material:material:1.4.0' // 或回退到旧版支持库(非 androidx) implementation 'com.android.support:appcompat-v7:25.4.0' ``` - 若依赖包(如某库的 4.7.1 版本)强制使用 `androidx`,需回退到支持 `android` 库的版本,例如从 `4.7.1` 回退到 `4.6.0`[^3]。 3. **检查 Gradle 插件兼容性** - 在项目根目录的 `build.gradle` 中,确认 Android Gradle 插件版本: ```groovy classpath 'com.android.tools.build:gradle:4.2.2' // 兼容旧版支持库 // 或 classpath 'com.android.tools.build:gradle:7.0.0' // 需使用 androidx ``` - 确保 Gradle 版本匹配(如 AGP 4.2.x 对应 Gradle 6.7.1)。 4. **清理并重建项目** ```bash ./gradlew clean && ./gradlew :launcher:assembleRelease --stacktrace ``` 5. **检查资源合并结果** - 在 Android Studio 中打开 `build/intermediates/merged_res`,查看最终合并的资源文件是否包含 `colorPrimary` 定义。 --- #### 相关引用 - 依赖库版本冲突导致的资源解析失败[^3] - AAPT 错误与资源链接失败的具体堆栈信息[^2] - Flutter 升级后构建问题与 Gradle 版本关联性 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值