我有一段时间的Java Android项目。今天,我已经将Android开发工具更新为Google的最新版本。项目破了 - 我得到了一堆“case表达式必须是常量表达式”的编译错误信息。
事实证明,R.java文件现在以不同方式生成。以前,它会有一堆
public static final int MyID=0x12340000;
语句;现在,它看起来(在清理/重建之后)像这样:
public static int MyID=0x12340000;
final
消失了。所以我拥有的资源ID的所有开关(我都有一些)是错误的。怎么了,拜托?只有我吗?这里的理由是什么?是否记录在任何地方?我可以以某种方式带回final
吗?
答案 0 :(得分:24)
这发生在昨天,当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代码与main一起重新编译 项目使用时。这对性能不利,因为 它使构建非常慢。它还阻止了分发库 不包含源代码的项目,限制了使用范围 图书馆项目。
字段不再是最终的原因是它意味着库jar可以编译一次并直接在其他项目中重用。除了允许分发二进制版本的库项目(来自r15),这样可以更快地构建。
答案 1 :(得分:2)
您可以切换到使用If / Else语句,警告将消失。
示例:
@Override
public void onClick(final View v) {
//finds which button was pressed
final int buttonView = v.getId();
String current = fromEditText.getText().toString();
if (buttonView == R.id.bA) {
current += getString(R.string.a);
}
答案 2 :(得分:0)
只需将此片段添加到您的模块级from PIL import Image, ImageFilter
def prepare_image(img):
"""Transform image to greyscale and blur it"""
img = img.convert('RGB')
img = img.filter(ImageFilter.SMOOTH_MORE)
img = img.filter(ImageFilter.SMOOTH_MORE)
if 'L' != img.mode:
img = img.convert('L')
return img
def remove_noise(img, pass_factor):
for column in range(img.size[0]):
for line in range(img.size[1]):
value = remove_noise_by_pixel(img, column, line, pass_factor)
img.putpixel((column, line), value)
return img
def remove_noise_by_pixel(img, column, line, pass_factor):
if img.getpixel((column, line)) < pass_factor:
return (0)
return (255)
img = Image.open("captcha.png")
img = prepare_image(img)
img = remove_noise(img, 115)
img.save("result.png")
文件中即可:
build.gradle
答案 3 :(得分:-2)
您应该使用view binding!
android {
...
viewBinding {
enabled = true
}
}