Android : 所謂分裂


分裂,一聽就不是好詞。但最近關於 Android 的報道中,代碼分裂這個詞出現頻率越來越高。以至於作者們幾乎形成了某種反射:一比較 Android 和蘋果,就冒出「分裂」。類似一比較韓寒和郭敬明,大家就想起「抄襲」。

Android 的模式是 Google 的巨大挑戰。一個 OS ,眾多廠家二次開發,用在無數的設備上,兼容更多的軟件。其中的各種因素,都是動態變化的。(OS , 廠家二次開發的API ,硬件,第三方軟件。)但軟件工程的訓練和實踐告訴我:這不是不可能的。比我的個人經歷更有說服力的,是 IBM 開放 PC 標准。他的成功不容置疑。 Android 的模式,一定程度上,是開放 PC 標准的翻版。只不過野心更大,更激進,也更亂。

目前關於代碼分裂的報道,同樣亂的要命。有時把不同層次的事情混成一團。比如開發版本不兼容運行版本這種 iPhone 上也存在的事,也被當成了代碼分裂的例子。

其實,所謂「代碼分裂」,有三個不同的層次。

第一種分裂:廠家改動標准 API

廠家私自改動了 Google 提供的標准 API 。比較極端的例子是,開發者看著 Goolge 的文檔,寫了個程序創建地址簿。結果, Create 方法,在 HTC 的手機上,被廠家改為了刪除。。。

這種改動的後果不言而喻。 Google Market 上的程序,將無法在這樣的 Android 手機上正常運行。付錢買了軟件的用戶,含淚看著空空的地址簿,肯定憤怒的去找開發者算賬。而開發者並沒有做錯什麼。(唯一的過錯是測試不足吧。)

這種分裂,是真實而且嚴重的威脅。

Google Market 還未成長起來。既無重量級軟件,也無有分量的公司。裡面的人的發言,對於硬件廠家,相當於耳旁風。所以,如果出現這種情況, Google 應該替他們說話。保障開發者的權益,就是保障 Android 應用豐富的美好未來。

不過,硬件廠家也不可能成心和開發者鬧著玩。賣友求榮的事情不稀奇,損人不利己的做法不多見。他的機器沒法用 Google Market 上的軟件,也不是什麼光彩的事情。因此,一般情況下,廠家傾向於追加新的 API 。而不是改動標准的。所以這種分裂的例子很罕見,舉來舉去,就那麼幾個。

第二種分裂:實現偏差

手機的有些功能, Google 負責定義,但是如果功能硬件密切相關,具體的工作就留給硬件廠家去完成。不是 Google 懶,這是軟件工程的一種控制技巧,目的是把事情交給最適合的人去完成。Google 定義的 API 叫接口。廠家的工作叫實現。

上百款 Android 手機,分屬幾十個廠家,那麼一個接口返回的結果,就可能有幾十種實現。全部返回同樣的結果,是Google 的期望,但是現實中往往不盡如人意。

比如圖像處理芯片會提供壓縮圖片的功能,開發者全部通過定義好的接口調用。但是 HTC 搞了個新機器,換了圖像處理芯片,那麼它返回的結果,可能就和開發者手中的 G1 看到的,有些偏差。

出現這種問題的責任,可以歸結於 Google ,或者,硬件廠家。也許是接口定義和文檔不夠清晰,也許,是實現沒有遵循定義。

個人意見,這也是小問題。

如此復雜的軟件工程,不可能事事如意。出現偏差,是必然要付出的代價。對於開發者, Test and Debug Anywhere ,是軟件開發的常態,無需抱怨。

當然 Android 的手機泛濫之後,他不可能款款測試。不過,反正 Android Market 沒有審查機制,他可以根據用戶的反饋迅速對應問題。

解決第二種分裂的辦法,是明確的定義,清晰的文檔和及時的溝通。Google , 手機廠商,開發者們合作的時間長了,類似的問題應該會減少。

第三種分裂: 風格分裂

很多文章中「代碼分裂」的真正所指,其實是風格分裂。

手機廠商拿到 Google 的系統,做了二次開發,加了更漂亮的殼,產生了一個新的代碼的分支。但是重點其實不在代碼上。新的分支還是符合 Google 的設計初衷的。廠家可以自己定義和擴展一些東西。開發者們也知道什麼是標准的,什麼是由廠家自己追加的。代碼的分支增加了,危害並沒有增加。

唯一令人不爽的,是一個華麗解鎖動畫之後,點個 Google Market 的程序,出現的是 Android 本身朴素的 UI 。

所以,這種分裂,與其叫做代碼分裂,不如叫做風格分裂。

風格分裂其實在 App Store 上的程序上也存在。 甚至蘋果自己的內置程序都是如此。 Email 還算和系統貼近。天氣則完全不同。

如果要把風格分裂看做一個問題,那麼解決的辦法大概有以下幾種。

第一種是技術上的:軟件工程可以把程序的表現抽象出來,交給別人去完成。不是什麼新東西, S60 上,第三方程序,就可以使用系統主題的某些元素了。

第二種辦法是商業上的:只要有錢賺,開發者會為某些手機,開發 UI 特別華麗的版本。你肯付錢?那麼風格自然有保證。

對於這個問題, Google 也肯定有過考慮。但我猜測,他的方案不是上面任何一個。這個提供全球最好搜索體驗的公司,打算利用"用戶"來解決這個問題:

讓他們忍了。:)

Android 走的是數量和功能路線。 Google 期望的是提供海量的,覆蓋各種價格和規格的手機。同時,給你強大的應用。如此,可以橫掃大部分市場了。

如果有人要求統一的視覺感受,設計或者感受上的和諧?對不起,請去找蘋果。

最後的話

所謂分裂代碼,並沒有分裂祖國那麼嚇人。一定程度上,是允許的。

一方面,第三甚至第二種分裂,通過技術和工程上的控制可以改善。另一方面,他們的出現,是 Android 模式的必然代價。要求開源,認可廣泛的二次開發的同時追求統一風格,是不太現實的任務。

好在,蘋果的高度統一有好處,但是亂,也有亂的優勢。 Google 出賣了統一風格的同時,也換來廠商參與的積極性。

劃清底線,留有空間,通過授權調動別人。對比蘋果的控制和審查,也許是更高水平領導藝術。

現在, Google 玩的還略顯笨拙。但是他在一個不斷上升的市場中,本錢也足夠。堅持下去,遲早學到需要的技能吧。

可以預見的未來,這三種分裂,仍然會伴隨 Android 。結果呢?也許是有點惱人的用戶體驗, Android 機型廣泛覆蓋各個領域,市場份額節節攀升。

當然,會有挑剔的用戶為此扔掉 Android ,選擇 iPhone 或者 Blackberry 。但是這些人,是否值得 Google 花更大的力氣去爭取?

廠家間的多贏,就是如此。被謀殺的,原來只是用戶的錢包。

Google 和 蘋果,本是同謀。

引用 ifanr
較新的 較舊