【发布时间】:2011-02-21 19:07:24
【问题描述】:
作为我在 Eclipse 中开发的 Android 应用程序的一部分,我需要将来自不同项目的两个包合并到一个项目中。我尝试将第二个项目的包中的文件复制到第一个文件夹的 src 文件夹下,并将第二个包所需的其他文件复制到第一个项目的 res 文件夹中。
但自动生成的 Java 文件,即 R.java 不会在复制时得到更新。我尝试右键单击项目并单击 Android 工具 -> 修复项目属性。但什么都没有改变。
【问题讨论】:
作为我在 Eclipse 中开发的 Android 应用程序的一部分,我需要将来自不同项目的两个包合并到一个项目中。我尝试将第二个项目的包中的文件复制到第一个文件夹的 src 文件夹下,并将第二个包所需的其他文件复制到第一个项目的 res 文件夹中。
但自动生成的 Java 文件,即 R.java 不会在复制时得到更新。我尝试右键单击项目并单击 Android 工具 -> 修复项目属性。但什么都没有改变。
【问题讨论】:
我宁愿通过 linked folder 添加第二个源目录。
(特别是因为他们now support relative path(3.5),如下图所示(仅限3.6)
alt text http://img411.imageshack.us/img411/1299/dynamicpathvariables.png)
另一种解决方案是在第一个的“项目依赖项”中简单地添加第二个项目。
alt text http://img24.imageshack.us/img24/9511/eclipsebuildpath.png
【讨论】:
src 文件夹来制作一个项目。这意味着重新创建所有正确的设置(类路径、库依赖项......)。
您不应该求助于导入或交叉引用项目。
据我所知,R.java 文件是从 res 中的 XML 文件生成的。
具体来说,它是根据 layouts 中的“id”和 strings.xml 文件中的“name”创建的。 (可能还有其他事情可以做到这一点,但这是我所知道的)。
也许,在复制您的文件时,您的 id 没有用“+”格式化,如果值不存在,则鼓励创建它们。
例如,布局中的 TextView 将包含:
<TextView
android:id="@+id/author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
这对创造新的价值至关重要。
将基本编辑放入 xml 文件并保存它,然后撤消编辑并再次保存也可能会有所帮助。保存可能会触发 Eclipse 插件重新生成 R.java 文件。
【讨论】:
VonC 的方法在运行时产生 force-close noclassdeffounderror 时遇到了困难,因为引用外部项目不会使类在运行时可用。也许我做得不对,但我找到了一个不同的解决方案来分享:
将需要合并的两个项目放入同一个工作区并打开它们。将一个工程设置为库,在另一个“主”工程中引用该库,如图: http://developer.android.com/guide/developing/projects/projects-eclipse.html
不要忘记在主项目的清单中声明您从库项目中使用的任何应用程序。
【讨论】: