AAPT2错误 - 在mergeDebugResources中找不到appcompat-v7文件

时间:2018-05-23 13:42:43

标签: android gradle android-gradle aapt2

我有一个Hudson构建工作,但错误

 Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

在日志中,有很多这样的行:

C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\3bbc697d357b69b5ea5f78a35f99a514\res\color\abc_hint_foreground_material_dark.xml: error: file not found.

我发现了一些关于此类AAPT2错误的问题,例如thisthis,但他们似乎没有解决问题。

那么为什么构建失败?

1 个答案:

答案 0 :(得分:3)

根据第一个相关问题,禁用AAPT2似乎是一个坏主意,因为AAPT可能会在将来某个时候删除。

第二个链接问题至少给出了一个线索,接受的答案是该版本的gradle不处理.gradle缓存路径中的非ASCII字符。但在我们的例子中,缓存路径中没有任何非ASCII字符被记录。

实际上,从日志中,gradle正在查找C:\Windows\System32\config\systemprofile\.gradle内的缓存,该缓存只能通过管理员权限访问。不是我们想要缓存库的地方。

This回答,以及gradle论坛上的this post是让我找到解决方案的原因。默认情况下,短版本会在用户区域中缓存已下载的库,并且似乎有bug in Java,它将错误地确定用户主目录。这导致gradle缓存放在它真正不应该的位置。

要解决问题,我们只需要设置gradle的用户主目录。 This blog post有很多方法可以做到这一点。一种方法是创建一个GRADLE_USER_HOME环境变量,它具有应用于机器上所有gradle构建的优点。