将我的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
替换它们?
为什么他们没有提出与第一个文件相同的错误?
答案 0 :(得分:3)
不,你应该从不在你的应用中使用@ + android:id。 android命名空间是为框架保留的。这对应用程序来说从未安全使用,现在会生成编译错误。
对于一些小背景,在android命名空间中生成新ID会将它们放在现有android命名空间ID之后的未使用空间中。这将在框架中添加新ID之前正常工作,此时您的内部ID将与实际框架ID重叠并导致奇怪的问题。
至于其他情况,那些也应该产生错误。 AAPT中可能存在错误。无论如何,你应该从你的资源中删除@ + android的所有实例。
答案 1 :(得分:3)
虽然我的评论很晚。我今天遇到了同样的问题,更新了我的日食和工具。将 @ + android:id 更改为 @ + id ,它解决了我的问题。