这两天非常手贱的更新了Android SDK和ADT插件(ADT 21),结果别人传给我的代码无法编译生成R.java文件,后来发现自己新建的工程同样无法生成这个文件,查找了N多网上的资料终于解决该问题,记录下自己的经验,同时鄙视下越来越不靠谱的google。

 

错误提示可能与“java.lang.NullPointerException”或者提示"can not find R.java"有关。

 

 

  1. 看到有人删除workspace下的.metadata目录就ok,我也删除了一把,然后重新导入工程,再设置自己的首选项,仍然未能编译成功;
  2. 另外看到还有人说是因为工程目录下存在.svn等没有文件名只有后缀的文件名导致这个问题,但是我的项目还没纳入svn或者git进行管理,所以肯定不是这个问题,别人有问题的貌似可以通过升级svn版本到1.7解决;
  3. 甚至还有人对于不是Android项目的工程通过拷贝一个project.properties到工程目录来解决问题的;
  4. 好吧,我先对工程Fix Project properties和Project->Clean来一次,清空一些不必要的代码;
  5. 然后在Build Path中添加gen目录和src目录,如有必要删除gen目录下的所有内容;
  6. 看到有人说ADT 21存在BUG,好吧,我去Help->About Eclipse->Installation Details中将ADT的工具全部升级一遍(ADT 22),然后重启Eclipse;
  7. 现在要求我升级Android SDK,我忍了,我升级到SDK v17;
  8. 发现仍然不能编译,但是发现Tools中有升级选项?我继续升级~~~;
  9. 升级Android SDK、Android SDK Tools、Android SDK Platform-tools、Android SDK Build-tools;
  10. 并且将$(SDK)/platform-tools和$(SDK)/platform-tools、$(SDK)/build-tools/17.0.0全部添加到我的path环境变量中,升级过程中关闭Eclipse;
  11. 好吧,升级过程中甚至可能需要关闭几次Android SDK Manager;
  12. 最后升级完毕的工具列表:

  13. 关闭SDK Manager,打开Eclipse,编译工程成功;

搞定了这个问题之后有些经验需要分享:

 

  1. 尽量不要使用Google集成好的Eclipse+ADT工具;
  2. 尽量不要有新版本就去升级;
  3. 升级之前一定要做好备份工作(包括Eclipse+ADT的备份、SDK的备份),我就是太相信google了导致两天左右时间都在解决这个问题;
  4. 升级之前最好查一下该版本ADT插件和SDK有无BUG,尽量在家庭电脑上升级后发现没问题再升级工作环境;
  5. 升级之后再打开SDK Manager检查下是否全部升级完毕;
  6. 另外一个小技巧:如果通过File->Import导入工程发现不能成功运行,试试看New Project->from exist code看看,貌似很多这种情况的;