【问题标题】:Can I run run an android application as a standalone desktop application without an emulator?我可以在没有模拟器的情况下将 android 应用程序作为独立桌面应用程序运行吗?
【发布时间】:2010-12-29 10:15:51
【问题描述】:

是否可以在不使用模拟器的情况下开发针对移动设备的 android 应用程序并使用相同的代码在 windows、linux 或 osx 上作为独立的 java 桌面应用程序执行? IE。拥有独立运行的传统 Java 应用程序的外观和感觉?

【问题讨论】:

标签: java android desktop-application


【解决方案1】:

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

更长的答案:

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

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

最后,还有一些第三方应用程序开发框架可以跨多个平台工作。立即浮现在脑海的是Appcelerator's Titanium,但也有其他人。您可能会在这些方面获得一些运气。

【讨论】:

    【解决方案2】:

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

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

    显然,Android 应用程序是用 Java 编写的,因此没有什么能阻止您在 Android 应用程序和 Java 桌面应用程序之间共享一些代码,但这可能必须是“业务逻辑”部分。由于尚未将 Android 类移植到 Java VM 并且没有针对 Android 的 AWT 或 Swing 实现,因此很难使它们看起来相同。

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

    【讨论】:

      【解决方案3】:

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

      这应该不是什么大问题,因为 Android SDK 和 JDK 之间有很大的重叠。

      此外,对于诸如 XML 解析、网络之类的事情,您可以只使用适用于两者的类。

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

      【讨论】:

        【解决方案4】:

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

        有一些最小的例子。 Here 是它们的通用代码。

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

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

        Skorpios 非常漂亮,而且运行良好。通过在桌面上使用 Java 的 HotSwap,开发速度显着提高,因为 Android 部署时间通常为 60 多秒。在桌面上进行开发,取得一些实际进展后,在 Android 上运行您的应用程序,它就可以工作了。 FWIW,我有一些相关项目也支持桌面和安卓客户端/服务器网络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 提供对每个平台上的文件、首选项和数据库的访问。

        【讨论】:

          猜你喜欢
          • 2010-10-31
          • 1970-01-01
          • 1970-01-01
          • 2011-05-03
          • 1970-01-01
          • 2011-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多