我正在使用Eclipse开发Android棋盘游戏。 我在Android项目中开发了UI。
另一方面,我在常规Java项目中开发了AI,因为我希望能够在没有Android模拟器的所有约束的情况下测试它(我没有找到任何其他方法来运行代码我的Windows JVM)。
现在,我希望“加入”两个项目(独立工作正常),即使用UI中的AI Java类。
这就是我的尝试:
在我的Android项目中属性> 项目参考,我勾选了Java项目。 这允许我在没有错误的情况下构建Android项目(实例化AI对象)。
但它在运行时因此错误而失败:
Could not find class 'my.package.AI', referenced from method my.otherpackage.UI.onStart
将AI Java项目纳入我的Android项目的正确方法是什么?
(注意:我仍然希望能够开发和测试AI作为常规Java应用程序,因此我认为使用 jar 或将所有源代码复制到Android项目将不适合我的需要)
修改
我希望新的ADT第17版可以解决问题,但事实并非如此。我几乎尝试了所有可用的选项,在我的Android项目中包含一个项目:
允许编译和无错误运行的唯一方法是将Java项目的JAR添加到Android项目构建路径。
答案 0 :(得分:10)
项目参考仅将依赖项目源代码(您的AI项目)添加为软(可能是一个更精确的单词)参考,您的AI项目不会添加到您的Android项目构建路径中。所以当Eclipse构建你的app时,实际的ai.jar不会被导出到最终的apk中。
您应该将AI项目添加到Android项目构建路径中:
步骤2可能是可选的,这应该在Android项目中添加AI项目作为参考,并在Eclipse构建Android项目时将ai.jar导出到final.apk。
从ADT 17.0.0更新:
Android Dev Team刚刚发布了带有ADT 17.0.0的SDK r17,声称现在可以正确处理这些用例:
Eclipse特定的更改
名为“Library Projects”的动态类路径容器已重命名为“Android Dependencies”,因为它现在不仅包含Library Projects。
现在,容器也将填充由Library Projects引用的仅Java项目。如果这些Java项目也引用其他Java项目和/或jar文件,它们将自动添加(也支持通过用户库引用的jar文件)。
重要说明:仅当引用设置为在引用项目中导出时才会发生这种情况。请注意,将项目或jar文件添加到项目构建路径时,这不是默认设置。 始终导出库项目(及其libs / * .jar文件的内容)。此更改仅影响仅Java项目及其自己的jar文件。
同样,检测并删除重复项(包括项目和jar文件)。
更多this link。
答案 1 :(得分:3)
编辑经过多次测试,阅读并找到了我的解决方案。问题是(在撰写本文时)您无法从Android项目引用另一个项目,尽管它适用于普通的Java应用程序项目。
我的解决方法(带有NTFS文件系统的Windows):
在提示符(管理员权限)中,使用指向源项目文件夹的mklink /D
命令创建符号文件夹链接,并根据需要在Eclipse中刷新。
显而易见的限制是你不能在源项目和目标项目中使用相同的包名,然后在公共项目中存在libs的问题。
示例:
cd \java\workspace\AndroidProject\src\your\package
mklink /D common c:\java\workspace\CommonProject\src\your\package\common
澄清:您可以从Android项目中引用另一个项目进行编译,但是当您运行时,所包含项目中引用的类不会被放入apk classes.dex
(使用dex反编译器验证)。
答案 2 :(得分:0)
在Windows 7 64位上使用ADT 21.0.0 64位。我尝试添加项目来构建路径。在订单和出口中打勾,玩了订单。我读了official solution,该解决方案的detailed explanation,导出为JAR,添加到库中。没有工作,而源没有错误。请仔细阅读解决方案并不适合所有人的评论。
厌倦了它并尝试了一个简单但有点混乱的解决方案:将Java项目的源链接到Android项目。这就是诀窍。希望这也能帮助别人。
答案 3 :(得分:-1)
不要将其添加到项目参考区域,而是进入Android窗格(在“项目属性”中),向下滚动到底部,然后将其添加到“库”下。
这有时会起作用,但有时会产生奇怪的Eclipse问题(不确定原因),在这种情况下,将jar直接复制到项目中似乎效果最好。