昨天遇到编写Android程序时突然发现,layout中修改控件的id时,在类文件中无法更新获取。挣扎半天多出修改测试出现了Error executing aapt: Return code -1073741819的错误。但是撤销后程序还是可以运行,不过R文件无法更新的问题依然存在。万般无奈下选择了把project给clean了,结果果然R文件丢失,出现了一堆的错误,但是编译器找不到具体出错的地方。

      通过网上查询,找到R文件丢失的原因和解决办法,结合以往的经验总结下。

xml文件出现错误。clean后R文件不会自动生成,更改错误后,只要选择自动构建则可以生成回来。通常只是这一点错误导致界面类文件中涉及的控件都无法识别,我之前跟着项目组做过一个项目就是遇到问题网上查说需要clean,结果clean后出现的那些错误标识把我给吓到了- -。

      R文件的解决办法(翻译自Stack Overflow的回答)

  • 找到xml文件的所有错误,确保R文件的连接没有受损
  • 看看导入时,是不是错导成import android.R(早些时候我也犯过这个问题)
  • 运行Project -> Clean,这回删除并重新构建R文件
  • 确保Project -> Build Automatically勾选
  • 等一会儿,重启试试
  • 如果还不行,删除/gen/里面的所有文件(夹)
  • 检查.properties文件,确保该文件没损坏出错
  • 右键 project -> Android Tools -> Fix Project Properties

      当然这些道理我都懂,但这些方法就从来没真正解决过我的R文件丢失的问题过


Error executing aapt: Return code -1073741819这个错误,找了好久,有得人说style中把有@+id的项去掉,有的说“<item name="android:layout_below"> ”这类型语句用重复了,有的解决办法是R.String的字符串没有提前定义。总值,出现这个错误的原因是Android资源文件冲突或者不合法。然后我去把各个资源文件夹layout、anim、Colors、String都依次删了,再clean观察错误的数量有没减少。直到我把res/menu/下的所有文件删除,返现错误说从600+降到十几个,终于找到错误的大概位置。后来经过一段时间的实验,发现错误,竟然是设置menu属性时,android:icon="@drawable/person_info ",person_info后面多加了一个空格!!!!这个空格把我给折腾的啊啊啊。

      通过这个问题我来总结一下这种问题比较实际的处理思路吧:

  • 通常 R的某个id在activity中无法识别出来,肯定是xml文件出错了,这时候clean必然会出错,但又不能放任不管
  • 这种错误偶尔编译器会识别,但是大部分时候根本不管用!!你需要在最近更改的xml文件中,仔细找到bug
  • 这次由于我放任了这个bug一段时间,导致资源文件多出来不少,可以采用批量删除筛选的方法。此时clean会导致activity中所有引用R的地方都会产生一个error,当你批量删除的地方存在bug,R文件会自动构建,此时剩余地方的资源文件可以得到正常的使用,因此error数会大大减少。将这个方法在最近更新的文件中使用,效果更好。
  • 培养使用版本控制工具保存代码的习惯,经常提交代码,版本对比功能会帮助你的
  • Stack Overflow真的真的很好用,不要只看中文的博客论坛了,将遇到的问题简单翻译成英文在google或者Stack Overflow中搜,效果很好!