(在运行Android和iOS的设备上使用Java ME甚至可能吗?)
是否有适用于Java的解决方案,可以创建只需一个应用程序即可无缝运行在所有设备上?或者我们必须为不同的设备重新编写应用程序?
我知道只有一种解决方案可以在Android/iOS上使用Java - Codename One。不幸的是,我还没有在实践中尝试过它,但我已经读了几篇文章并对它留下了非常好的印象。
我认为,跨平台应用的未来是基于HTML5、CSS3和Javascript。Java(或DART)可以作为高级语言生成Javascript。
我建议您看一下phonegap和mobilegwt用于移动设备,以及Adobe Air用于桌面应用。
您可以使用mobilegwt在Java中编写移动/桌面应用程序。然后,将应用程序交叉编译为不同的浏览器(iPhone、iPad、Android、BlackBerry、桌面),并将javascript+html+css+images打包到所有平台的本地应用程序中。
您的应用程序可以从Web服务器运行(下载HTML和所有内容),也可以是完全从设备上运行的Javascript应用程序;或者是两者的混合体:将Javascript应用程序部署到本地应用程序中,并从设备上运行,通过AJAX调用服务器。
这些应用程序通常被称为混合应用程序。
最终,您可以跳过Java部分,开发一个HTML5+CSS3应用程序,并使用PhoneGap打包到不同的平台。但我发现MobileGWT能够生成外观和感觉像本地应用程序(具有非常好的实现“外观和感觉”和动画效果)。而且GWT有助于将Java语言的可扩展性(可重用组件、工具和面向对象)带到JavaScript中。
对于桌面,您可以使用Adobe Air打包HTML5应用程序。
对于视频游戏,我认为PlayN值得一些关注,它能够为桌面Java、HTML5浏览器、Android、iOS、Flash(等等)交叉编译游戏,并产生令人印象深刻的结果,如Chrome版愤怒的小鸟(从Java交叉编译到JavaScript)。
Java代码被编译为字节码,保证跨平台,即可在任何JVM上执行。
不同的环境可以提供不同的平台相关API并需要额外的要求。例如,Java EE提供容器服务并要求编写容器管理组件(EJB、Servlet等)。但代码本身仍然是跨平台的。
尽管J2ME已经消亡,但它规定了编写MIDlets。它确实很特殊:它不提供常规的JDK,因此让我们避免讨论它。
iOS在“大型”Mac电脑上运行可以运行常规的Java。与在Windows或Linux上运行的相同的Java一样。因此,代码仍然是跨平台的。