Objective-c和Java,或者iPhone和Android之间有什么巨大的区别吗?

2022-09-04 05:04:49

编辑:我的坏,我的意思是客观c,而不是c#。我把它弄到脑子里的一些原因是iPhone使用的c#。所以c#的答案很好,谢谢,但它们有点无关紧要,很抱歉。

我看了一下,但找不到任何可以回答这个问题的东西,尽管有些人通过回答部分问题来缩短问题。在一小群人之间,我们计划在iPhone和Android上做一些工作,这两个人大部分是分开的,但互相帮助,有些人做图形工作在他们之间分开。

但是我们正在考虑在两者之间移动事物的可能性,不一定是应用程序,也许只是有用的类或其他东西。看看objective-c和Java,它们似乎具有与系统接口相同的功能,因此我们想知道,如果我们在每个系统上创建一个抽象,以便它们可以被赋予相同的输入(除非我错了,否则不会给系统带来太大的压力?), 在编写在objective-c和Java之间转换的东西时会有什么问题,比sdk中方法的位置更糟糕吗?或者,在一种语言中是否有关键功能或另一种语言中没有的东西,而我们错过了这些功能,这意味着唯一的方法是从头开始重写。


答案 1

我不会浪费时间试图找到iOS和Android之间的共性。

跨平台几乎总是浪费时间和资源,除非跨平台功能是应用程序运行的核心。对于iPhone和Android等具有自定义操作系统并与硬件非常紧密地工作的平台来说尤其如此。

从长远来看,跨平台开发环境会增加而不是降低复杂性。是的,这听起来很整洁,但通常你很容易得到你想要的90%,然后你遇到了一个障碍,摧毁了你所做的所有节省,然后开始把你放在洞里。有许多妥协和方形钉子卡在圆孔中。

除非你的应用在理论上可以从通用网页工作,否则跨平台不适合你。

在Objective-C和Java的特定情况下,尽管Java是Objective-C的后裔,但它们没有现代互操作性。不能使用一个代码。

您应该花时间学习每个平台的特定API。没有捷径可走。


答案 2

XMLVMCodename OneiSpectrum这样的工具告诉我们,你实际上可以将Java代码(从Android应用程序或从头开始创建一个)交叉编译到在iPhone上运行的Objective-C代码,而无需在Apple方面安装任何虚拟机。

我建议观看使用Java开发iPhone应用程序

不幸的是,苹果的iPhone SDK许可协议禁止将Java虚拟机移植到iPhone。在本演示中,我们将介绍一个开源的Java到Objective-C交叉编译器以及Cocoa库的基于Java的实现。在这些工具的帮助下,iPhone应用程序可以用纯Java编写。使用Java版本的Cocoa,可以将基于Java的iPhone应用程序作为Java桌面/小程序应用程序运行,该应用程序可以交叉编译以在iPhone上本机运行。演讲将讨论Java-to-Objective-C交叉编译器以及基于Java的Cocoa版本的挑战。详情请见 http://www.xmlvm.org/

有关更多见解,请在此处找到有关Frebruary 2010中将Android应用程序交叉编译到iPhone的最新讨论,该讨论记录在 http://www.xmlvm.org/android/

Android是一个面向移动设备的开源平台。在谷歌的发起下,Android受到了极大的关注。Android 应用程序是使用 Java 开发的,尽管特殊的编译器会将类文件转换为基于寄存器的专有虚拟机,该虚拟机在 Android 设备上用于执行应用程序。Android定义了自己的API来编写移动应用程序。在XMLVM的帮助下,可以将基于Java的Android应用程序交叉编译为本机iPhone应用程序。

Android应用程序是用Java编写的,并使用Android特定的API。XMLVM提供了一个用Java编写的兼容性库,它提供了与Android相同的API,但只使用基于Java的COcoa Touch API。在交叉编译过程中,应用程序和Android兼容性库都从Java交叉编译到Objective-C,并与Cocoa Touch兼容性库链接,以产生本机iPhone应用程序。

从2008年关于为iPhone构建Java应用程序的谈话 http://www.xmlvm.org/iphone/

苹果的iPhone引起了用户和开发人员的巨大兴趣。与MacOS X一样,iPhone开发环境基于Objective-C作为开发语言,Cocoa作为GUI库。iPhone SDK 许可协议不允许开发虚拟机。使用XMLVM,我们通过交叉编译Java到iPhone来规避这个问题。就像Java应用程序可以交叉编译为AJAX一样,XMLVM可用于将Java应用程序交叉编译为Objective-C。交叉编译也是通过在Objective-C中模仿基于堆栈的机器来完成的。