跨平台行動裝置

2011 年 4 月 29 日

隨著許多行動裝置平台的興起,每個平台都有不同的使用者介面,許多人都在尋找跨平台工具組。這些工具組讓您可以編寫一次行動應用程式,然後部署到各種行動裝置。這些工具組值得使用嗎?

跨平台工具組很有吸引力。市面上有許多行動裝置,為每個裝置編寫應用程式需要花費大量時間。如果我們可以編寫一次,然後在任何地方執行,那會容易得多。

當然,我們之前在桌面應用程式中已經見識過。多年來,有許多嘗試為桌面建立跨平台環境。Java 可能最為人所知,但它既不是最好也不是最早的(請詢問 Smalltalker 關於 VisualWorks 的資訊)。但您可能會注意到,跨平台應用程式整體而言並不成功。[1][2]

第一個問題是處理不同平台上使用者介面控制項之間的差異。您有兩種廣泛的策略:您可以在每個平台上使用原生元件,或使用更原始的圖形模擬元件,實際上是建立您自己的使用者介面系統。在 Java 世界中,這是 Swing(模擬)和 SWT(原生控制項)之間的差異。

兩種方法都有問題。如果您使用原生控制項,您必須處理不同平台上類似控制項在工作方式上略有不同的問題,這使得很難想出一個好的抽象化。此外,您必須決定如何處理僅在某些平台上可用的功能,您會不會最終得到平台的最小公分母?

因此,模擬變得具有吸引力,無論是作為一種整體方法,還是彌補在某些平台上無法獲得的控制。模擬有幾個難題:首先,很難讓模擬的使用者介面執行得足夠靈敏 - 這對於使用者介面控制項來說是一個大問題。其次,讓它們執行得與原生控制項完全一樣非常困難。很容易陷入恐怖谷,在這裡,事物的工作方式大多與原生控制項類似,但只有足夠細微的差異讓使用者感到不適。對於使用者介面控制項,你必須非常嚴格才能讓行為「恰到好處」。

獲得良好的使用者介面控制項幾乎是不可能的,但這不是最大的問題 - 更重要的是整體使用者體驗。不同的平台有不同的預期使用方式,這會改變整個體驗設計。如果你使用基於 Unix 的系統,良好的體驗設計將廣泛使用滑鼠中鍵,因為這是 Unix 使用者介面的方式。但在 Mac 上嘗試這麼做,你會遇到困難,因為 Mac 認為即使兩個按鈕也太多。

行動裝置在這裡負擔更重,因為它們在整體使用者互動方式上有更大的差異。最近,一位客戶要求我們採用為他們開發的 iPhone 應用程式,並製作 Android 版本。我們的初步實驗表明,我們必須從頭開始完全重新思考體驗設計,才能獲得一個不錯的 Android 應用程式。iPhone 應用程式的測試案例為 Android 應用程式的功能提供了極有價值的核對清單,但應用程式的整體感覺必須有所不同。

因此,基於這些原因,我認為跨平台行動工具組是一個死胡同。對於它們來說,要真正模擬原生體驗實在太難了。如果值得建置原生應用程式,那麼就值得適當地建置它,包括針對該平台的個別體驗設計。[3]

那麼,這對那些想要支援大量行動平台,但又不願意為每個平台處理原生應用程式成本的人來說,會是什麼情況?幸運的是,我們確實有一個可以在任何有價值的行動裝置上執行的單一平台 - 網路。當由了解自己在做什麼的人撰寫時,網路應用程式現在可以非常實用且有能力。這裡最大的問題是離線使用。如果你可以一直使用線上,那麼這不會是個問題,但如果你需要離線,則需要探索各種本地儲存選項

當你製作網路應用程式時,不要試著讓它看起來和感覺起來像原生應用程式,而是讓它看起來像行動網路應用程式。它仍然會像模擬應用程式一樣好用,但會避免讓你的使用者陷入詭異谷。這反映了桌機上發生的事情,想要支援多個桌機平台的人發現網路是一個有效的部署平台。它成功的關鍵在於人們期望網路應用程式表現得像網路應用程式,所以他們不期望它們像原生應用程式一樣,避免在不同平台上產生不同的使用者預期的問題。

總結

  • 不要使用跨平台工具組
  • 為了最大化觸及率:建立一個看起來像網路應用程式的網路應用程式
  • 為了吸引特定平台:為該平台建立一個原生應用程式,並根據該平台的互動風格建立體驗設計

後續

一些來自電子郵件和其他評論的想法和反應

一位通信員談到他的公司如何建立原生應用程式,這些應用程式是網路應用程式的精簡包裝。這提供了啟動和取得常見連結的便利性,同時將大部分行為保留在跨平台網路中。

Gunnar Peterson 認為 安全模型的差異 也會阻礙跨平台工具組。

筆記

1: 這些問題是關於具有圖形使用者介面的跨平台應用程式。沒有使用者介面的程式庫在跨平台方面運作得非常好。因此,在桌機上最好的策略通常是將跨平台程式庫與每個平台的客製化使用者介面結合。

2: 一個值得注意的例外是 Jetbrains 的開發工具系列。我無法解釋為什麼它們會是如此例外。

3: 我看到一條路徑可能會證明我錯了。在這個場景中,你使用跨平台工具組,但你為你建立的每個平台撰寫一個不同的應用程式,並具有不同的體驗設計。這樣做的優點是,你的開發人員可以使用單一平台,並且可以重複使用一些常見程式碼(特別是非使用者介面程式碼)。此策略並未解決處理使用者介面控制項的問題,即使它有效,也只有在開發人員理解和程式碼重複使用的好處顯著時才值得。