天天看点

【android相关】【问题解决】R.java文件丢失

  在进行android开发过程中,有时候,我们会遇到gen文件中r.java丢失的现象。重新build,或者clean工程,close并重新打开project,但有时也没解决。

  这可能是由于不小心把xml文件写错了,或者在编辑xml或者其他文件时候点击了run,或者clear过项目等...,反正,你会发现gen下面的r.java的文件找不到了。

  其实,只要xml文件有问题,系统就不会给自动生成r.java文件,因为系统需要参照每个xml里的数据来生成r.java。

  当然,如果项目较大,而layou下xml文件有较多的情况下一个一个看也比较麻烦,这时候,尝试选择刷新项目,并eclipse-->project-->clean,这个时候,project中可能就会出现红色的错误信息,根据这个去逐个解决之后,一般就可以了。

  然后,对着工程点击鼠标右键 选择 build project,r.java 文件又回来。这样r.xx.xxx 就能 x 的出来了; 如果还没出来,那么可以尝试从别的工程中拷贝一份r文件过来 然后string.xml里随便改动一下 即可更新r文件; 不过要注意,多检查工程,像文件的命名之类,比如我就曾犯过错误,把layout下的文件命名为haobooks_content.xml,结果一直不对,需要全部小写就可以了。

  这里记得这个原则:资源的命名规则是不允许有大写字母出现的。另外也不允许下划线_出现。

  那么,我们来看看这个文件到底是做什么的。

  r.java这个文件是会自动生成的,它记录了一些系统的资源信息,不需要我们自己手动去编辑。  

【android相关】【问题解决】R.java文件丢失
【android相关】【问题解决】R.java文件丢失

  r.java文件中默认有attr、dimen、drawable、id、layout、menu、string、style等静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,比如public static finalint activity_hao_books=0x7f030000;对应的是layout目录下的activity_hao_books.xml文件。

 attr 是控件的属性,一般在res/attr.xml中定义,控件可以使用这里面的资源。目前未定义,所以为空;

  dimen 是屏幕属性,记录屏幕水平还是垂直对齐的一些属性;   

    drawable其实对应了res下的图片文件:ic_launcher.png,不同详述的同名的ic_launcher.png文件在drawable内部类总只有一个icon属性。如果我们在【drawable-*dpi】目录下再添加一幅图片,则内部类中会自动的添加一个icon属性。

    id 是需要找的控件的标示符号,我们常会写findviewbyid(××××),也就是在找这个id;

    layout 里面一般是main.xml,是布局相关文件;

    添加资源的命名规则:资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 这些字符,否则r.java文件不会自动更新,并且eclipse会提示错误。

    理解了r.java文件中内容的来源,即当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,adt会在r.java文件中相应的匿名内部类中国自动生成一条静态int类型的常量,对添加的文件进行索引。如果在layout目录下再添加一个新的界面,那么在public static final class layout中也会添加相应的静态int常量。相反当我们在res目录下删除任何一个文件,其在r.java中对应的记录会被adt自动删除。

     r.java文件按除了有自动标示资源的索引功能之外,还有另外一个主要的功能,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的apk包中,这样可以节省android手机的资源。

  对android的基础性文件解释,这个文章有写:http://blog.sina.com.cn/s/blog_b98d87830101c7ee.html,其实刚开始接触的话,看看还是有一定帮助。

转载请注明出处:http://www.cnblogs.com/haochuang/ 8年it工作经验,5年测试技术与管理,2年产品与项目管理,曾参与过云计算\云存储\车联网产品研发工作; 业余自媒体人,有技术类垂直微信公众号;如有招聘或求职方面需求,请mail to [email protected] ;或通过 qq:363573922 微博:@念槐聚 联系;

继续阅读