我可以运行Android应用程序作为没有模拟器的独立桌面应用程序吗?

时间:2009-12-23 09:30:52

标签: java android desktop-application

是否可以开发针对移动设备的Android应用程序,并使用相同的代码在Windows,Linux或osx上作为独立的Java桌面应用程序执行而无需使用模拟器?即具有独立运行的传统Java应用程序的外观和感觉?

4 个答案:

答案 0 :(得分:3)

Android使用自定义UI框架,该框架无法在桌面上运行。所以,简短的回答是否定的。

更长的答案:

尽管如此,您仍然可以在两者之间重用一些非UI代码。任何不调用android。*的代码都可能会移植。

您还可以编写一个隐藏UI工具包详细信息的抽象层。

最后,还有一些第三方应用程序开发框架可以跨多个平台工作。立刻想到的是Appcelerator's Titanium,但也有其他人。你可能会对这些运气感到满意。

答案 1 :(得分:2)

Android应用程序在Dalvik Virtual Vachine上运行,该{{3}}是与标准Java VM不直接兼容的自定义虚拟机(VM)。

据我所知,Dalvik VM的唯一实现是在Android设备和仿真器上。

显然,Android应用程序是用Java编写的,因此没有什么可以阻止你在Android应用程序和Java桌面应用程序之间共享一些代码,但这可能必须是“业务逻辑”部分。要让它们看起来很难,因为Android Classes还没有移植到Java VM,也没有针对Android的AWT或Swing的实现。

因此,您可以创建自己的ListModel类包含数据,然后使用Android上的ListView和桌面上的JList进行显示,这样您就可以拥有数据,但显示将看起来不同。

答案 2 :(得分:1)

嗯,要做到这一点,就要为UI和Android特定的API编写标准的抽象层。基本上隐藏了接口背后的所有Android和桌面特定调用。

这不应该是一个非常大的问题,因为Android SDK和JDK之间存在如此大的重叠。

此外,对于像XML解析,网络这样的东西,你可以只使用同时适用于它们的类。

除此之外,我认为没有任何其他方法可以“自动”使您的Android代码作为Java桌面应用程序运行。

答案 3 :(得分:1)

Skorpios项目允许您使用单个代码库在桌面和Android上运行OpenGL应用程序。

有一些极少数的例子。 Here是这些的常用代码。

要在桌面上运行公共代码,请将Game实例传递给DesktopGLView。我使用this class来运行测试,只需将测试类的简单名称作为命令行参数传递。例如,“FontTest”。

要在Android上运行公共代码,请将Game实例传递给AndroidGLView,这是一个可以放在android.app.Activity中的android.view.SurfaceView。通常你会想要一个只显示游戏的Activity,在这种情况下你可以将Game实例传递给GameActivity而不是AndroidGLView。如果您只想在Android手机上运行测试应用,只需将skorpios-android-test project部署到手机即可。

Skorpios非常光滑,效果很好。由于Android部署时间通常为60秒以上,因此在桌面上使用Java的HotSwap可显着提高开发速度。在桌面上进行开发,在您取得实际进展后,在Android上运行您的应用程序就可以了。 FWIW,我有一些相关的项目也支持桌面和Android用于客户端/服务器网络with TCP/UDP和另一个with HTTP/servlets/Google App Engine

然而,Skorpios仍处于生命的早期阶段。我是作者,最近被其他事情分散了注意力。到目前为止它已many basic OpenGL functions。支持新功能非常简单(只需将它们添加到GL,DesktopGL和AndroidGL),我一直在根据需要添加它们。

我打算让项目充当OpenGL的抽象层,同时也用于游戏中常用的非OpenGL桌面/ Android功能。以下是目前实施的一些示例:

  • Preferences将HashMap持久存储在桌面上的磁盘上,并在Android上使用android.content.SharedPreferences。

  • Database提供了对Android上SQLite的简单访问,目前是桌面的无操作。

  • Device提供对Android振动的访问权限,目前在桌面上无需操作。

  • ResourceLoader提供对每个平台上的文件,首选项和数据库的访问。