Android资源ID突然不是最终的,switch()被破坏该怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (36)

我有一段时间Java安卓项目。今天,我已经将Android开发工具更新为Google的最新版本。这个项目打破了 - 我得到了一堆“case表达式必须是常量表达式”的编译错误消息。

事实证明,R.java文件现在生成的方式不同。以前,它会有一堆:

public static final int MyID=0x12340000;

报表; 现在,它看起来(在清理/重建之后)如下所示:

public static int MyID=0x12340000;

final离开了。因此,我拥有的资源ID(以及我有几个)的所有开关都是错误的。请问发生了什么?只有我吗?这里的基本原理是什么?

提问于
用户回答回答于

这发生在昨天,当SDK / ADT 14发布时:

从ADT 14开始,图书馆项目中的资源常量不再是最终的。这在http://tools.android.com/tips/non-constant-fields中有更详细的解释

有一个来自ADT 14的quickfix:http : //tools.android.com/recent/switchstatementconversion

引述理由:

当多个库项目合并时,字段的实际值(必须唯一)可能会发生冲突。在ADT 14之前,所有领域都是最终的,因此,所有图书馆必须在使用它们时将所有资源和相关Java代码与主项目一起重新编译。这对性能不利,因为它使构建非常缓慢。它还阻止了分发不包含源代码的库项目,限制了图书馆项目的使用范围。 字段不再是最终的原因是这意味着库罐可以被编译一次并直接在其他项目中重用。除了允许分发二进制版本的库项目(即将发布在r15中)之外,这样做的速度更快。

扫码关注云+社区