3

在我将我的 android 工具升级到最新版本以在API21上工作后,尝试编译我的项目导致以下错误:

  • update_languages_button_preference_layout.xml:2:注意:您的意思是使用@+id而不是@+android:id吗?
  • update_languages_button_preference_layout.xml:2:错误:为外部包 android 创建资源:id/layout。
  • update_languages_button_preference_layout.xml:2:错误:错误:找不到与给定名称匹配的资源(在 'id' 处,值为'@+android:id/layout')。

问题似乎出在这行android:id="@+android:id/layout":用@+id 替换@ +android:id足以能够正常编译和运行项目。

然而,对整个代码库的快速搜索发现了项目中android:id="@+android:id/...使用该构造的其他几个位置。这些显然并没有阻止该项目通过所有测试,即使我不能保证它们仍在使用中。

  • 是否有任何合法使用android:id="@+android:id可以证明将这些引用留在我们的 xml 文件中,而不是全部替换为@+id?

  • 为什么他们没有提出与第一个文件相同的错误?

4

2 回答 2

3

不,你不应该你的应用程序中使用@+android:id。android 命名空间是为框架保留的。这对应用程序来说从来都不是安全的,现在会产生编译错误。

对于一些背景知识,在 android 命名空间中生成新的 ID 会将它们放在现有的 android 命名空间 ID 之后的未使用空间中。这将正常工作,直到在框架中添加新的 ID,此时您的内部 ID 将与实际的框架 ID 重叠并导致奇怪的问题。

至于其他情况,那些也应该产生错误。AAPT 中可能存在错误。无论如何,您应该从您的资源中删除所有 @+android 实例。

于 2014-10-27T20:10:33.893 回答
3

虽然我的评论很晚。我今天在更新我的 Eclipse 和工具时遇到了同样的问题。将@+android:id更改为@+id并解决了我的问题。

于 2014-12-03T14:40:49.600 回答