AAPT2 错误 - 在 mergeDebugResources 中找不到 appcompat-v7 文件
AAPT2 error - appcompat-v7 files not found in mergeDebugResources
我的 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.aarbbc697d357b69b5ea5f78a35f99a514\res\color\abc_hint_foreground_material_dark.xml: error: file not found.
我发现了一些关于 AAPT2 错误的问题,例如 this and ,但它们似乎没有修复。
那么为什么构建失败了?
根据第一个链接问题,禁用 AAPT2 似乎不是一个好主意,因为 AAPT 可能会在将来的某个时候被删除。
第二个链接问题至少给出了一个线索,接受的答案是 gradle 的那个版本不处理 .gradle 缓存路径中的非 ASCII 字符。但在我们的例子中,正在记录的缓存路径中没有任何非 ASCII 字符。
事实上,根据日志,gradle 正在寻找 C:\Windows\System32\config\systemprofile\.gradle
中的缓存,只有管理员权限才能访问。不是我们想要缓存库的地方。
This answer, along with this post on the gradle forums are what led me to the solution. Short version is, by default gradle caches downloaded libraries in the user area, and there seems to be a bug in Java 它会错误地确定用户的主目录。这导致 gradle 缓存被放置在它不应该放置的地方。
要解决这个问题,那么,我们只需要设置gradle的用户主目录。 This blog post 有很多方法可以做到这一点。一种方法是创建一个 GRADLE_USER_HOME 环境变量,它的优点是适用于机器上的所有 gradle 构建。
我的 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.aarbbc697d357b69b5ea5f78a35f99a514\res\color\abc_hint_foreground_material_dark.xml: error: file not found.
我发现了一些关于 AAPT2 错误的问题,例如 this and
那么为什么构建失败了?
根据第一个链接问题,禁用 AAPT2 似乎不是一个好主意,因为 AAPT 可能会在将来的某个时候被删除。
第二个链接问题至少给出了一个线索,接受的答案是 gradle 的那个版本不处理 .gradle 缓存路径中的非 ASCII 字符。但在我们的例子中,正在记录的缓存路径中没有任何非 ASCII 字符。
事实上,根据日志,gradle 正在寻找 C:\Windows\System32\config\systemprofile\.gradle
中的缓存,只有管理员权限才能访问。不是我们想要缓存库的地方。
This answer, along with this post on the gradle forums are what led me to the solution. Short version is, by default gradle caches downloaded libraries in the user area, and there seems to be a bug in Java 它会错误地确定用户的主目录。这导致 gradle 缓存被放置在它不应该放置的地方。
要解决这个问题,那么,我们只需要设置gradle的用户主目录。 This blog post 有很多方法可以做到这一点。一种方法是创建一个 GRADLE_USER_HOME 环境变量,它的优点是适用于机器上的所有 gradle 构建。