2010-11-18 73 views
3

我想知道如何開發多平臺應用程序。諸如用於MAC/Windows的Microsoft Office,用於MAC/Windows/Linux的FireFox等的應用程序。如何開發多平臺應用程序?

如果他們必須爲不同的平臺編碼,那麼它很難管理,並且涉及許多其他複雜性。

問:開發團隊如何管理多平臺開發的複雜性?

+2

什麼問題? – 2010-11-18 22:29:25

回答

6

Microsoft Office不是一個多平臺應用程序。如果你曾經使用Mac版本,你會知道。最後一個多平臺版本的Office是1998年臭名昭着的Office 6.0版本。發生了什麼事是用戶對外觀和感覺呻吟,並譴責了「移植」的心態。

Office的Mac版本不僅由不同的團隊編寫,而且由完全不同的部門編寫:Mac業務部門,也稱爲MacBU。不同的部門主管,不同的經理和我相信不同的銷售和營銷人員。

這是做到這一點的一種方式。在Mac用戶中也被稱爲「正確的方式」。

當然,並不是每個人都是微軟的大小,並且有能力創建一個完全不同的子公司來支持Mac用戶(更少的Linux用戶)。更爲理智的做法是爲wxWidgets或QT或GTK等GUI界面使用跨平臺庫。畢竟,大多數核心C代碼在平臺上不會有太大變化,只是像GUI和文件管理這樣的專有內容。哎呀,你甚至可以堅持POSIX函數調用文件管理和網絡跨平臺。但需要注意的是,Mac用戶很可能會討厭最終結果(比如MS Office 6.0發生的情況)。

第三種方式是中間的方式。保持常見的核心應用程序代碼與專有GUI的東西分開(無論如何,這在維護性方面都是個好主意)。 MVC設計模式是這樣做的好方法。有一種方法(使用#define或不同的構建腳本/ makefiles)來切換MVC框架的View和Controller組件。這就是Google在Chrome上所做的。 Mac版本使用原生Mac圖形,而Windows/Linux版本使用名爲Skia的圖形引擎。 Chrome的核心是WebKit和V8,它們都是跨平臺的。

1

由於存在多平臺應用程序,因此可能有多種方法。在一般情況下,他們會歸結爲幾個不同的策略:

  1. 使用的語言,具有可移植運行時 - 的Java例如,.NET程度較輕,或任何一個數不勝數的不同解釋的腳本語言。

  2. 使用跨平臺工具包(例如QT)來隱藏平臺差異。

  3. 在像C或C++這樣的語言中使用條件編譯來更改不同平臺的代碼庫。這與#2類似,不同之處在於您基本上在自己的應用程序內構建了自己的跨平臺工具包。

0

如果你談論編譯C++,你最終得到一些有條件的定義,就像在代碼的一些地方#IFDEF WIN32。在編寫跨平臺代碼時,您必須測試跨平臺。像哈德森這樣的構建系統可以在您簽入時幫助您在所有平臺上構建您的代碼。

對於圖形用戶界面的東西,使用像QT這樣的良好的跨平臺庫是非常有用的。它可以讓你以同樣的方式編寫你的gui代碼,但保持原生的感覺,無論它被編譯的系統。

希望這會有所幫助!

0

多平臺代碼的主要方法是一個多平臺的基礎。例如,自由使用boost庫(用於文件訪問,線程同步原語等)的C++代碼將在多平臺設置中工作。同樣,如果您創建.net(託管)代碼,那麼跨平臺功能可以通過.net運行時(如果在Windows上)或Mono(如果在Linux系統上)來實現。

有比這些更多的事情來解決,但這是最大的。對於C++來說,其他事情可以包括GUI的處理方式。再次使用跨平臺代碼的故意選擇發揮其作用 - 例如使用WxWidgets或Qt。

有一個cross-platform build過程也是有幫助的。

0

一種方法是創建一個硬件/操作系統抽象層。您可以使用標準C庫或等效代碼在C或C++中創建應用程序,該代碼不依賴於您定位的平臺。

對於OS或特定於硬件的接口(如加載/保存對話框,打印,工具欄,通知等),可以爲應用程序創建一個通用API,然後編寫兩個獨立的實現 - 一個用於每個目標平臺。

在處理文件格式或網絡協議時,可能需要包含代碼,以便在主機字節順序(可能是大小寫字母順序)和正確字節順序之間轉換多字節值文件/網絡協議。

0

問:開發團隊如何管理多平臺開發的複雜性? A:很好的迴歸測試。

0

一種方法是針對每個平臺特定的功能具有單獨的類,並將特定平臺所需的所有類一起編譯。這樣代碼就更乾淨了,並且也避免了不必要的抽象。以下是"Upload XML data to MySQL or NoSQL" 的一個示例藍色是用於NoSQL的,粉紅色用於SQL,卡其色用於通用代碼,灰色是語言支持。