http://blog.csdn.net/f330656066/article/details/9241163
public static final int main=0x7f030004;
然而,截至ADT 14,他们将宣布如下:
public static int main=0x7f030004;
在R文件少了个final
换句话说,常量not final 在图书馆项目。原因很简单:当多个库项目相结合,实际值的字段(必须是唯一的)可能发生碰撞。ADT 14之前,所有字段都是决赛,所以作为一个结果,所有库必须有他们所有的资源和相关的Java代码重新编译以及使用时的主要项目。这是糟糕的性能,因为它使构建非常缓慢。这也防止了分配库项目,不包括源
代码,限制了使用范围的库项目。
领域的原因不再是最后的是,它意味着库jar可以被编译一次,直接在其他项目中重用。以及允许分发二进制版本的库项目(进来r15),这使得更快的构建。
然而,它有一个影响图书馆的源代码。下面的代码形式将不再编译:
int id = view.getId();
switch (id) {
case R.id.button1:
action1();
break;
case R.id.button2:
action2();
break;
case R.id.button3:
action3();
break;
}
这是因为开关语句需要所有case标签,比如 R.id.button1,在编译时保持恒定(这样值可以直接复制到 .class 文件)。
这个问题的解决方案非常简单:转换开关语句变成一个if - else语句。幸运的是,这是很容易在Eclipse中。只是把插入符号在开关的关键字,并按下ctrl - 1(或cmd 1在Mac):
它将把switch语句为:
int id = view.getId();
if (id == R.id.button1) {
action1();
} else if (id == R.id.button2) {
action2();
} else if (id == R.id.button3) {
action3();
}
这通常是在UI代码和对性能的影响可以忽略不计。
我们有一个探测器,发现这些错误(不恒定case标签引用一个R字段),并提供一个简短的说明的问题(和指向这个页面获取更多信息。)
More information about the automatic detection.