Android中的资源和R.java类
在Android项目中的res目录中包含了项目使用的各种资源,这些资源全部都分布在res目录下的各个子目录中。每个资源都有两个属性,一个是资源的名字,一个是资源的类型。此外,res目录下的资源在编译后都会有一个对应的id。
R.java类(以下简称R类)是Android中一个非常重要的类,其中定义了res目录中全部资源的id。在代码中通过R类获取到资源的id后,即可调用Android API来获取和使用对应的资源。例如:
ImageView imageView = (ImageView)findViewById(R.id.imageView);
TextView textView = (TextView)findViewById(R.id.textView);
imageView.setImageResource(R.drawable.bg)
textView.setText(R.string.app_name)
R类的生成
R类并不包含在项目代码中,而是由Android SDK在编译阶段通过aapt工具生成的。一般情况下,开发者不需要关注R类的生成,直接在代码中使用即可。然而在某些情况下需要由开发者手动生成R类,并放到项目代码中。
为什么需要手动生成R.java类
Android library
Android 项目根据用途的不同分为app项目和library项目。app项目用来生成可以在Android系统上运行的apk程序,提交到应用市场给用户使用。而library项目并不会生成apk,而是生成一个sdk,提供给其他开发者使用。
对library项目来说,如果library工程中包含了资源,如layout,drawable,string,dimen等,那么需要将这些资源文件和编译后的代码一起放到sdk中。对Eclipse library工程,是将整个res目录原样放到sdk中。对Android Studio的library工程,会将整个res目录打包到aar文件中。