我想开发一款既能在安卓又能在iPhone上运行的应用程序。我猜它们分别使用Java和Objective-C语言。我是否可以使用单一的编程语言,例如Python?这是最佳的方法吗?如果使用Python,是否会损失性能、功能等方面的表现?是否会遇到任何限制?
你不能在Android或iPhone平台上使用Python。这显然被苹果SDK许可证所禁止,而对于Android来说,实际上有一个Android脚本环境,但你很快就会意识到它并不适合最终用户。无论如何,Python不支持iPhone,这使得它不能作为跨平台选项。我认为构建真正支持Android和iPhone的跨平台应用程序的唯一方法是通过HTML5。当然,HTML5应用程序并非完全本地化,但您可以设计混合模式,在其中使用在设备上本地托管或在您的站点上托管的HTML5内容,并在本地网络视图中显示它。纯HTML5应用程序并非完全本地,因为它们是HTML5而不是CocoaTouch(Android)应用程序。它们只能做HTML5允许的事情,并具有HTML5的外观和感觉。一个主要的限制是设备上特殊硬件的不可用性,例如加速器、陀螺仪等等。无论如何,它们提供了很大的灵活性和最大的跨平台兼容性。这是一个极端。另一个极端是“完全本地应用程序”,即使用Objective C/Cocoa Touch或Java/Android开发的应用程序。完全访问SDK,特殊硬件,本机外观和感觉,在平台之间没有兼容性。有第三种可能,即混合应用程序。您可以定义本机骨架UI(例如,基于导航的iPhone应用程序),并通过HTML5提供视图的内容和详细接口。骨架UI将不具备可移植性,但它将允许您做比纯HTML5应用程序更多的事情。此方法通常需要在您的应用程序中使用HTML查看器类,因此您将具有:骨架UI + 本机Web查看器 + HTML5内容。关于“设备上托管的HTML5内容”:您可以在Web服务器上托管HTML5应用程序,也可以在本地托管设备并从那里加载它(无需Web访问)。
我所知道的最接近的是MonoTouch和MonoDroid项目。它们允许您编写C#代码而不是Objective-C(用于iPhone)和Java(用于Android)。问题在于UI,因为没有针对不同UI模型的通用抽象。理想情况下,您可以以一种不与UI绑定的方式编写核心业务/域/任何代码,然后通过这种方式获得一些重用。 我没有看到@Snicolas提到的Appcelerator,但它可能在两个平台上提供更好的总体抽象。
我认为最好的方法是直接迎难而上,最终学习Java和C/Objective-C。这里有一些比较在这里。因此,你可以先用Java/Android编写一个简单的应用程序,然后尝试在iOS/C/Objective C中复制它。如果你采取这种“瞄准星星,落在月球上”的方法,你会忘记自己一生中学过多少种语言。