这两天非常手贱的更新了Android SDK和ADT插件(ADT 21),结果别人传给我的代码无法编译生成R.java文件,后来发现自己新建的工程同样无法生成这个文件,查找了N多网上的资料终于解决该问题,记录下自己的经验,同时鄙视下越来越不靠谱的google。
错误提示可能与“java.lang.NullPointerException”或者提示"can not find R.java"有关。
- 看到有人删除workspace下的.metadata目录就ok,我也删除了一把,然后重新导入工程,再设置自己的首选项,仍然未能编译成功;
- 另外看到还有人说是因为工程目录下存在.svn等没有文件名只有后缀的文件名导致这个问题,但是我的项目还没纳入svn或者git进行管理,所以肯定不是这个问题,别人有问题的貌似可以通过升级svn版本到1.7解决;
- 甚至还有人对于不是Android项目的工程通过拷贝一个project.properties到工程目录来解决问题的;
- 好吧,我先对工程Fix Project properties和Project->Clean来一次,清空一些不必要的代码;
- 然后在Build Path中添加gen目录和src目录,如有必要删除gen目录下的所有内容;
- 看到有人说ADT 21存在BUG,好吧,我去Help->About Eclipse->Installation Details中将ADT的工具全部升级一遍(ADT 22),然后重启Eclipse;
- 现在要求我升级Android SDK,我忍了,我升级到SDK v17;
- 发现仍然不能编译,但是发现Tools中有升级选项?我继续升级~~~;
- 升级Android SDK、Android SDK Tools、Android SDK Platform-tools、Android SDK Build-tools;
- 并且将$(SDK)/platform-tools和$(SDK)/platform-tools、$(SDK)/build-tools/17.0.0全部添加到我的path环境变量中,升级过程中关闭Eclipse;
- 好吧,升级过程中甚至可能需要关闭几次Android SDK Manager;
- 最后升级完毕的工具列表:
- 关闭SDK Manager,打开Eclipse,编译工程成功;
搞定了这个问题之后有些经验需要分享:
- 尽量不要使用Google集成好的Eclipse+ADT工具;
- 尽量不要有新版本就去升级;
- 升级之前一定要做好备份工作(包括Eclipse+ADT的备份、SDK的备份),我就是太相信google了导致两天左右时间都在解决这个问题;
- 升级之前最好查一下该版本ADT插件和SDK有无BUG,尽量在家庭电脑上升级后发现没问题再升级工作环境;
- 升级之后再打开SDK Manager检查下是否全部升级完毕;
- 另外一个小技巧:如果通过File->Import导入工程发现不能成功运行,试试看New Project->from exist code看看,貌似很多这种情况的;