近日开发一个Android项目,为了在新项目中调用此前一个项目,将此前的项目变为Library Project, 新的项目引用旧的项目。开发工具是 Eclipse Helios.
创建好新项目后,发现Eclipse 中R.java 无法自动生成,R.java 文件不能自动生成的原因在StackOverflow上有较多的探讨,一个常见的原因是layout xml 使用了Android 2.2 新引入的元素,例如,match_parent, 而项目的编译目标版本却设置为2.1. 我的新项目恰好是编译目标是2.1, 我将编译目标改为2.2后症状消失,但是我的新项目中的layout xml 内容很简单,我确认没有使用2.2 的新元素。仔细查看Eclipse 的错误提示也没有有效的线索。
为了弄清错误的真正原因,折腾了很长时间。在Eclipse 中一次偶尔的操作之后——记不清是什么操作了,好像是取消自动编译,然后clean 旧的项目,clean 新的项目,再build 旧项目,build 新项目——突然,Eclipse 提示旧项目有编译错,而且是layout xml 文件的错误,仔细一看,知道问题出在哪儿了。
原来,我的旧项目设定编译目标是2.2, 而且layout xml 文件中有match_parent, 而新项目却设定为编译目标2.1, 新项目的设定随项目包含关系传导到了旧项目中,造成Eclipse 的自动生成R.java 的机制不正常了。
坑爹的是Eclipse 开始一直不能精确报告错误原因,找了这么长时间的原因,一定得记下来,希望这篇小文能有点用处。