我使用Android Studio 3.1.4
和android gradle plugin version 3.1.4
。
以前我在模块build.gradle
设置了buildToolsVersion "27.0.3"
,构建/运行没有问题。今天我安装了较新版本的build tools
并更改build.gradle
以使用它:buildToolsVersion "28.0.2"
但是当我尝试sync project with gradle files
或rebuild project
时,它以AAPT2
错误结束:
AGPBI: {"kind":"error","text":"error: u003citemu003e inner element must either be a resource reference or empty.","sources":[{"file":"<path to module>/src/main/res/values/ids.xml","position":{"startLine":16,"startColumn":4,"startOffset":752,"endColumn":55,"endOffset":803}}],"original":"","tool":"AAPT"}
....
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':<modulee-name>:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
但我不明白是什么导致了错误。例如,错误中的地址行是:
<item type="id" name="bookmark">false</item>
导致此错误的原因是什么以及如何解决此问题?
编辑
我在gradle.properties
中添加了android.enableAapt2=false
,它似乎忽略了错误,但会导致以下警告:
选项"android.enableAapt2"已弃用,不应使用 了。使用 'android.enableAapt2=true' 删除此警告。它 将于2018年底删除。
您不能将false
(或任何其他值,但name
(分配给 ID 资源。
ID 是使用 name 属性(而不是 XML 文件的名称(中提供的值引用的简单资源。因此,您可以将 ID 资源与一个 XML 文件中的其他简单资源组合在一个元素下。另外,请记住,ID 资源不引用实际的资源项;它只是一个唯一 ID,您可以将其附加到其他资源或在应用程序中用作唯一整数。
使用android.enableAapt2=false
它可能会忽略逻辑错误,但不会"修复它"。