2010-07-24 26 views
13

编辑:我的坏,我的意思是objective-c,而不是c#。有些理由我把它放到我的脑海里,这是c#使用的iphone。所以C#的答案很好,谢谢,但它们有点不相关,对此感到遗憾。objective-c和Java或iPhone和Android之间是否存在巨大差异?

我已经看过了,但找不到任何答案,尽管有一些答案通过回答部分问题缩短了问题。在一个小团体中,我们计划在iPhone和Android上做一些工作,大部分是分开的,但彼此互相帮助,并且有些人正在做图形工作。

但我们正在考虑在两者之间移动东西的可能性,不一定是应用程序,也许只是有用的类或其他东西。看看Objective-C和Java,它们似乎具有相同的功能,最大的障碍是系统界面的东西,所以我们想知道,如果我们在每个系统上创建了这些抽象,那么它们可以得到相同的输入(除非我错了,否则不会对系统造成太大的压力?),在编写一些在objective-c和Java之间转换的东西时会有什么问题,比sdks中方法的位置更糟?或者是否有一种语言中的关键特征或其他语言没有,我们错过了这一点,这意味着唯一的方法就是从头开始重写。

+0

Err ...在下面的答案中已经提到了几次,但仅仅是指出... ** iPhone在Objective-C中编程,而不是在C#中编写。**(C#是Microsoft技术,也许您可​​以编程在Windows Phone 7中) – Ricket 2010-07-24 17:41:44

+0

Windows Phone 7可以用C#编程(现在只有C#)。您还可以在Silverlight和XNA之间选择Windows Phone 7中的用户界面支持。 – 2010-07-24 17:45:37

+2

实际上,Mono软件包和工具支持在开发iPhone,iPod Touch和iPad应用程序时使用C#。 – 2010-07-24 17:47:16

回答

0

您无法使用与Android相同的语言开发iPhone。对于iPhone,您只能在Objective C中编程,它由Apple开发。你不能在android上使用它,做iPhone开发的唯一方法就是使用该语言(这是用户协议)。

至于C#与Java,整个原理是不同的。 Java是每种平台的一种语言,.Net是每种语言的平台。它们不兼容。您可以在Android上使用Java,但我不确定您是否也可以使用C#(.Net)。

无论如何,您必须为这两个移动操作系统构建两个不同的应用程序。

+0

J ++不再受支持。 – 2010-07-24 17:42:00

+0

它虽然存在。我将编辑以使其更清楚。 – 2010-07-24 17:43:22

+0

J ++已经死了。微软在数年前就已经解散了它,并将其转移到了C#团队中。这与MS和Sun之间的法律纠纷完全不同。 .NET语言使用Microsoft支持的Mono开源平台在unix平台(Mac,Linux等)上运行。我知道他们正在为Android提供支持。他们确实支持iPhone开发,直到苹果最近的许可证更改切断了Objective-C的本地开发。 – 2010-07-24 17:44:22

3

如果你专注于抽象掉的东西像系统的相互作用,并坚持语言的公共子集,你也许可以建立,将几乎不需要修改移动从一种语言到其他类。

由于C#的泛型在运行时保留了强类型,所以C#比泛型有更好的泛型实现。

C#也有LINQ,据我所知在Java中没有等效(但)。 LINQ提供了一种类似于SQL的查询功能,内置于该语言中,并由.NET框架完全支持,可让您查询对象集合,并以非常功能化的语言进行操作。一旦查询提供者提供了转换为其他格式的对象模型,则查询提供者可以将LINQ扩展为使用其他数据格式(如XML和SQL)。 LINQ还使多核工作的并行化变得非常容易。这是语言能力的一个巨大扩展。

0

如果你正在考虑做Android开发,我最好的建议是去java。完全不需要编写一个完整的抽象(假设你可以)将C#转换为Java。至于iPhone的开发不要怀疑使用Objective-C出于同样的目的。

4

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

我建议看Developing iPhone Applications using Java

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

和更深入更近的说起从2010年Frebruary交叉编译Android应用程序到iPhone上可用here,这是在http://www.xmlvm.org/android/记载:

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

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

从2008年说起构建Java应用程序的iPhone http://www.xmlvm.org/iphone/

苹果的iPhone产生了巨大的兴趣 之间的用户和开发 的一致好评。与MacOS X一样,iPhone 开发环境基于 Objective-C作为开发 语言和Cocoa for GUI 库。 iPhone SDK许可协议 不允许 开发虚拟机。 使用XMLVM,我们通过将Java交叉编译为 iPhone来规避此 问题。就像Java应用程序 可以交叉编译为AJAX一样,可以使用XMLVM 将Java 应用程序交叉编译为Objective-C。通过模拟基于堆栈的机器 交叉编译也可以实现 Objective-C。

+2

正是我为什么决定跳过iPhone开发...更不用说,你必须有强大的下巴和倾向于提供苹果口头刺激才能获得应用程序批准。 – androidworkz 2010-07-28 11:55:01

+0

你并不总是必须以困难的方式去做事情。 – overboming 2010-07-28 13:26:25

+0

获得批准的应用程序并不难。 – 2011-02-23 09:40:19

1

如果你真的想做跨越手机开发,只要它不是真的计算昂贵的东西,我可能会去PhoneGap

PhoneGap是一个用于构建跨平台移动应用程序的开源开发框架。使用HTML和JavaScript构建应用程序,并仍然利用iPhone/iTouch,iPad,Google Android,Palm,Symbian和Blackberry SDK中的核心功能。

据我所知,它几乎是iPhone应用程序商店中允许的唯一跨平台工具包。

如果你对本机开发没有兴趣,我认为你会发现,除非你制作游戏并瞄准c,否则将会有很多工作需要移植。框架非常不同,构建用户界面的方式非常不同。这就是说,回答你是objective-c和java的直接问题,并不是那么糟糕。然而,它不同于一个抽象工具并不那么容易 - 不像Java vs C#。例如,Objective-c没有垃圾回收(无论如何都是iPhone),而且语法非常不同。 Objective-c在方法调用方式(objective-c中的消息)方面更松散。也就是说,它们在编程范式方面并没有太大的差异。它们都是面向对象的命令式语言。他们都有公共和私人的课程和方法。如果你想手工移植代码,它不会是世界末日,我只是觉得你可能会花费更多的时间去尝试构建一个抽象层。

+1

与PhoneGap类似,Titanium(http://www.appcelerator.com/)允许您使用网络技术构建*本机*移动和桌面应用程序。我不知道Java是否可用于iPhone,iPad,但通过http://monotouch.net/项目的C#已经存在,并且接受了几个应用程序,请参阅http://monotouch.info/MonoTouch/Apps – bitek 2010-07-28 14:10:16

+0

发现并感兴趣的iSpectrum项目(除了回答部分已经描述的XMLVM项目),允许您为iPhone构建Java应用程序,请参阅http://www.flexycore.com./ispectrum-overview.html – bitek 2010-07-28 17:21:19

52

我不会浪费时间去寻找iOS和Android之间的共同点。

跨平台几乎总是浪费时间和资源,除非跨平台功能是应用程序运行的核心。对于具有定制操作系统并且与硬件紧密配合的iPhone和Android平台而言,情况尤其如此。

跨平台开发环境增加而不是减少长期复杂性。是的,这听起来很整洁,但通常你可以轻松获得90%的收入,然后你遇到了一个障碍,它会破坏你所做的所有积蓄,然后开始把你放在洞里。简单来说,许多妥协方案和方钉被卡入圆孔。

除非您的应用程序理论上可以从通用网页上运行,否则跨平台不适合您。

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

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

+4

这是鼠尾草针对跨平台用户界面的建议,但不是所有的跨平台代码。 – jamesh 2010-08-03 11:43:33

+2

非常非常好的建议。并且非常整齐,继续前进。但那些已经希望跨平台的人不会接受它...... – 2012-05-03 11:16:04

3

这个话题往往充满了技术圣战的教条,所以我会试着在我的答案中避开这个问题。

根据我的经验,我会很大程度上同意人们说,试图在两个平台之间共享代码会很困难。但是,也有一些重要的例外:

我会考虑跨平台开发您的业务逻辑

  • 是不平凡的;
  • 应该跨平台进行标准化;和
  • 与外界有良好定义的交互(例如网络堆栈或UI)。
  • (奖金)已经写好了。

鉴于现在臭名昭着的3.3.1限制源代码语言,苹果公司正在确定速度的步骤。您可以根据捆绑的Webkit,C,C++和Objective C编写Javascript代码。

如果您不想在'droid上安装额外的语言,则可以使用编译为达尔文代码的Java, Javascript根据webkit的稍微不同的构建或者来自NDK的东西。然后你会看到C/C++。你可以交叉编译Objective-C,但我没有任何经验。

将业务逻辑与用户界面和网络完全分离很重要,因为您需要为网络层编写适配器,而用户界面则需要其他配置。

我不会试图在C/C++编写跨平台UI代码,并要么写的东西使用HTML/CSS/JS,或者更可能写的东西完全习惯上采取不同的UI隐喻的优势每个平台 - 例如iPhone上没有类似于通知栏。 iPhone上的动画比Android上的实现要简单得多。

如果你不需要UI与操作系统大量集成,那么webview和一些HTML5就足够了。钛是一个很好的选择,我的同事告诉我比PhoneGap更好(即编译,而不是解释)。我再次不知道。

在复杂性方面,Open GLES可以在两种平台上使用。

还应该注意的是,在当前的Android操作系统中,SVG不可用。

相关问题