Android Studio 4.1.3找不到R.java文件 | 8月更文挑战

1,081 阅读1分钟

前段时间升级了 Android Studio 目前版本是 4.1.3

image.png

然后组里有一个人问我,R.java 文件在哪啊?一般来说,你可以直接点进去啊,或者在 build 文件夹底下都可以找到,然后他说找不到,于是我亲自给找:

image.png

还真的是啥都没有!!!!😲

于是我开始全局搜索查找,最终还是被我找到了,不过我没发现 R.java 文件,但是我看到了 R.class 文件,也差不多是想要的,在如下目录:

image.png

里面就是我们的资源 id 了:

image.png

同时,因为我们现在都是组件化开发项目,我们在使用 ButterKnife 的时候,也发现使用的是 R2 而不是 R 了,这个 R2 文件很好找:

image.png

那为什么用 R2 不用 R 了呢? 一般来说我们在 app 壳里的类经过编译之后,是这样的:

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(2131296285);
    LinearLayout ll_container = (LinearLayout)this.findViewById(2131165316);
    View child = View.inflate(this, 2131296292, (ViewGroup)null);
    ll_container.addView(child);
}

而如果是我们在 library 中编写的类经过编译之后,却略有不同:

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(layout.activity_me);
    TextView tv = (TextView)this.findViewById(id.tv);
}

它不是一个唯一确定的值了,而是 id.xx 这种形式,需要在运行时才能拿到。在这个 libraryR.class 中也可以看到不再是 final 类型:

public static int tv = 2131492967;

所以我们在 library 中使用 R.id.tv 利用 ButterKnife 是报错的,因为生成的不是 final 类型了。 ButterKnife 使用一个插件,拷贝 R 中所有的值到 R2中,并且把 R2 中的值都设置为 final 类型,这样就可以编译通过啦。

今日小分享到此结束,有问题评论区见哦~