迁移到 Android Studio 3.1.1 - 获取"AAPT: error: :item>."



我正在尝试将Android Studio 3.0项目迁移到Android Studio 3.1.1,它启用了Android gradle插件3.1.1和新的AAPT2资源处理器。我认为我的问题源于其中任何一个。

基本上,当我尝试分级同步我的项目时,我得到的错误是

用户/用户/src/app/

app-1/src/main/res/values/styles.xml:599:5-608:13: AAPT:错误::项目>。

我不知道仅基于此错误消息的错误可能是什么。在谷歌上搜索它似乎也没有找到任何东西。此错误消息指向的行没有什么特别的,只是一个样式声明:

<style name=“AppEditText" parent="BigEditText">
<item name="android:gravity">left</item>  
<item name="android:textCursorDrawable">@drawable/drawable</item>
<item name="android:background">@android:color/transparent</item>
…
</style>

根据错误位置并知道 AAPT2 现在处于打开状态(之前已关闭),我得出结论,该错误与资源有关,但我不知道出了什么问题。

我的项目由两个应用程序和一个公共模块组成,这两个应用程序都依赖于这两个应用程序。commons 模块也实现了一些 UI 组件。不确定这是否相关。

我将如何进一步调试?

更新:当我查看由AAPT2处理的合并values.xml时,我可以看到生成的values.xml包含一些奇怪的内容。

<ns3:item name="layout_columnWeight">1</ns3:item>
<ns3:item name="layout_rowWeight">1</ns3:item>

看起来错误来自这些行。但是他们怎么会在那里结束呢?谁将添加ns3命名空间,为什么?

好的 - 我终于找到了原因。

作为对其他遇到此类问题的人的提示,您应该转到控制台并使用--info标志进行gradle构建,它会告诉您在处理资源时错误发生在哪个文件中。这就是我设法实际查看错误位置的方式,因为问题出在开发人员通常永远不会看到的合并资源文件之一中。

问题是在我们的一些 XML 资源文件中,指定的命名空间support和/或为元素指定了命名空间自动 res 行,现在导致 AAPT2 出现问题。我不知道为什么它以前有效,但现在这导致了 AAPT2 的问题。删除这些命名空间声明可以解决此问题。

相关内容

最新更新