一. R.java文件变迁
其实ADT14前, R文件字段还是:
public static final int value=0x2de8572d8;
ADT14之后,R文件字段变成:
public static int value=0x2de8572d8;
那么问题来呢,为什么有这个变化?
其实ADT14之前字段为final的,如果library合并到主项目(R字段是unique),就可能在buid的时候出现字段冲突,为了避这种冲突,所以在每次使用library的时候都要重新编译.但是这样做的话,build项目就会很慢,于是为了build效率,所以就在ADT14(SDK r15)以后, R文件取消了字段的final, 这样的话,build的速度就快了.
二. Switch条件判断
switdh条件判断会遇到这个警告:
原因: switch要求所有的判断条件在编译的时候都是常量,这样的话可以把值直接复制粘贴到*.class文件,为了避免这个警告,官方建议换成if-else:
如下图:
三. Butterknife
题外话,刚觉得学下Butterknife这个方便的注解三方库,平时就findviewbyid用下来,然后发现官方弃用了,推荐用view binding.
而且如果用的话,现在Android studio也会报这个warnning :
因为生成的R.java文件的字段不是final的,而Butterknife的@BindView() 注解需要的是final.
那么如何解决Butterknife的这个警告呢?
- (首选) 迁移到View binding,
- (官方答案)用R2代替R
Butterknife官方团队的Readme :
其实我用了R2来取代R, warning仍然存在,有大佬能解答下吗?
等待官方回答中...