2010-07-24 89 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不可用。

相關問題