一、MIUI發展歷程回顧
早期的 Android 系統非常難用,界面也很丑陋,與同時代的 iOS 差距非常明顯,當時 Android 主要精力還是在完善系統本身,因此也基本沒有考慮過中國人的本地化需求。所以在當時,做一款定制化的 Android 系統,易用、漂亮、更符合國人的需求,在用戶側還是有非常大呼聲的。
MIUI 就是在這樣的背景之下誕生的。
2010 年 8 月 16 日正式發布了第一個版本,當時找了 100 個內測用戶,都是發燒友,率先將手機刷成 MIUI,深度使用、全方位吐槽、提各種意見建議。后來我們還拍了一部微電影,叫《100 個夢想的贊助商》,向最初的這部分發燒友和所有一直以來支持我們的米粉們表達敬意和感謝。
MIUI 的整個理念也是從那個時候就形成的,沿用至今,即“和用戶做朋友”,真正去貼近和了解用戶,從各個渠道傾聽真實用戶的看法。其中有一個很重要的渠道是 MIUI 論壇,論壇上都是發燒友,大家互相交流各種玩機經驗,而 MIUI 甚至小米幾乎所有人也都在論壇上,經常和發燒友們一起交流,解答問題,同時征詢大家的各種看法。
比如,在做很多功能之前,我們都會去論壇上問大家的意見,根據收集回來的信息,再做方案上的調整。功能發出去之后,繼續在論壇上收集大家的吐槽,然后再快速迭代改進。
這里就提到了 MIUI 的另一大特點——每周發版,以前稱其為“橙色星期五”,這樣做的好處在于:用戶可以第一時間用到最新功能;如果不滿意,馬上吐槽,我們很快迭代方案,小步快跑,快速試錯。
這樣做得到了非常好的效果,所以那時大家說 MIUI 非常好用就不難理解了——因為 MIUI 的很多功能都是直接來自于真實的用戶需求,而且根據用戶的反饋修改無數遍,最終的效果自然會讓更多的人滿意。
回顧 MIUI 從 100 個用戶發展到今天的 2 億多用戶,期間變化非常大,其中兩個方面感觸比較深:
一個是人數上的變化,最開始人很少,研發人員只有 20 個左右,后來總體人數逐步發展到 1000 多,這個影響很深遠。一方面可以做更多的事情了,MIUI 在過去 8 年期間發布了 9 個大版本,幾百個小版本,包含了無數的功能,很多以前沒有足夠精力做的事情,也一點點做起來和完善了。另一方面,可以把事情做得更好了,以前可能只能達到 80 分的,現在可以做到 95 分,甚至向 98 分 100 分努力,無論是功能細節,還是技術實現,以及性能、穩定性、功耗等等,每一點的提升,背后都是大量的人力投入。
另一個是模式上的細分,最開始 MIUI 面向的都是發燒友用戶,都是很資深的玩家,動手能力強,對新功能很渴望,對 bug 容忍度高,所以快速試錯、每周升級對所有用戶都非常適合。但當用戶規模已經是 2 億以上時,對全部用戶都這么做就不再適合了,功能也需要做更多的權衡。MIUI 在此做了很多事情,比如細分了體驗版、開發版、穩定版,版本的發版頻率和功能取舍都是針對相應的人群專門制定的,因此發燒友與普通用戶才都能通過合適的版本滿足自己的需求。
二、MIUI 的持續創新
MIUI非常注重創新,產品創新、技術創新等,在內部都是受到極大鼓勵的,大家都勇于做各種層面的探索和嘗試,最終也達到了比較好的效果。一方面推出了很多業界首創的功能和技術,另一方面,也使得很多已有的功能和技術變得更加好用。
這方面的例子很多,舉兩個我當時參與和負責的項目作為例子吧:
主題
電腦和前智能手機時代,主題換膚還是一個比較普遍的功能,但是到了 iOS 和 Android 上,這個功能弱化了,只支持更換壁紙和鈴聲等非常簡單的個性化設置。但手機是私人物品,使用時間又長,用戶需要更多彰顯個性的能力。MIUI 應該是最早涉足 Android 系統級換膚能力的 ROM,當時有兩個方面的創新:
一個是功能側,MIUI 可定制項非常多,不僅支持壁紙、鈴聲、圖標、字體等單項的更換,同時還支持系統應用和第三方應用的界面素材更換,另外還有百變鎖屏、自由桌面等非??犰诺墓δ?,甚至還支持多套主題拆開混搭使用。
另一個是技術側,MIUI 很早就開始深入研究 Android 的應用資源管理機制,在此基礎之上率先做出了能更換所有應用資源的技術方案,后來很快又做到了更換主題后不需要重啟手機,全部效果就都能生效的體驗。而百變鎖屏技術框架在當時的 Android 上也是十分先進的,可以讓設計師很容易就寫出酷炫的動畫和交互,同時還能保證整個渲染的效率,以及很小的功耗代價,當時甚至還有人在百變鎖屏上開發和運行小游戲。
MIUI SDK
MIUI 發展到今天,已經可以在非常多的 Android 版本和底層平臺之上運行了,但這些背后,需要的是大量的移植和適配工作,不僅僅是 BSP 側的工作,MIUI 對于 Android 的改動,也都需要做機型適配。隨著 Android 版本和機型越來越多,如何能夠做到快速適配,就變成一個急需解決的問題了。以前 MIUI 對于 Android framework 的改動,基本是通過直接改代碼的形式實現的,這些都是移植成本。
為了降低這部分成本,我們提出了一個新的思路,將一部分代碼剝離獨立出來,形成一個 apk,叫做 MIUI SDK。
這個并沒有什么特別的,但 MIUI SDK 還做了另一件事:很多改變 Android framework 的行為,不再需要直接改代碼了,而是可以通過運行時動態 hook 的方式,將原始行為覆蓋掉。
說到這里,可能很多 Android 玩家馬上想到了 Xposed,最基本的原理的確比較類似,但是實際應用過程中會遇到很多問題。
一個最大的問題是:Android 從 5.0 開始,正式切換為 ART 虛擬機。以前的 dalvik 虛擬機做動態 hook 相對容易,方案也比較成熟,但是 ART 的原理完全不一樣,因為使用了 AOT 的方式,在安裝應用時直接編譯成機器碼,因此之前的技術方案完全不能使用。
Xposed 的思路是將 ART 虛擬機替換成一個修改過的版本,這樣可以配合上層框架做些工作。但是這個思路對于 MIUI 來說不是好的選擇,因為這實際上是將移植成本從 framework 轉移到了 ART 側。
MIUI 實際的做法是:通過對 ART 大量的調研工作,在 5.0 正式推出后很短的時間,就支持了動態 hook,這可能是第一個支持在 ART 上動態 hook 的技術方案,并且更關鍵的一點是,這套方案并沒有修改 ART 相關的任何代碼,最終和 dalvik 時做 hook 的效果基本一致。這套技術方案和相關的研究,不僅可以應用在機型移植和類 Xposed 的功能上,還可以應用在代碼熱修復、AOP 編程等很多領域。
三、未來移動端 OS 的展望和探索
這個話題比較大,沒有誰能一下子說得清楚,更很難預測準確,我對這件事情的理解也并不深,個人認為有兩個可能的方向:
深挖用戶體驗
用戶對移動端 OS 的訴求和 PC 端是不太一樣的,傳統 PC 端 OS 大部分情況下只需要提供狹義上 OS 的能力,加上一些簡單的工具和管理軟件即可,其他需求可以使用第三方軟件來滿足。
但移動端卻不太一樣:
一方面,很多重度應用是開箱必備的,一臺手機開箱后沒有相機、撥號、短信等應用肯定是無法想象的,而且這些應用都是用戶經常使用的。
另一方面,現在手機軟硬件一體化程度很高,很多功能如果 OS 不提供,很難有第三方應用能作為替代實現的。所以在這樣的背景下,移動端 OS 一定需要把這些應用以及其他系統層面的交互做得更好。
目前大部分 ROM 在這方面都已經很不錯了,但是還沒有觸到天花板,大的功能點差不多的前提下,后面拼的就是細節了,如何把體驗從 80 分提升到 95 分,從 95 分提升到 98 分,每一步都是巨大的工作量和挑戰。
通過新的形態提升效率
提升效率是絕大多數技術革命不變的核心之一,OS 也是這樣,比如提升資源的利用效率,但我這里說的,主要是對用戶操作的效率提升。如何將用戶的操作化繁為簡,是一個 OS 應該去思考的問題,MIUI 在這方面也做了很多的探索,我舉幾個例子:
負一屏
移動端傳統的使用方式還是先打開應用,然后在應用內使用服務,或者閱讀內容,但用戶關心的不是應用,而是應用提供的服務和內容本身。那么如果能夠將服務和內容前置到應用之外,用戶無需再多一步打開應用的過程,直接可以便捷的使用服務,就能大大提高用戶側的使用效率。MIUI 在這方面做了很多探索,一個最典型的例子就是負一屏,將服務和內容以卡片的形式鋪到桌面上,用戶直接使用即可。
傳送門
傳送門是 MIUI 9 發布會上一個重點介紹的功能,簡單來說,用戶可以在任何文字上長按,系統會分析這段內容,將相關的服務在下方展現出來,用戶點擊即可啟動相關服務。沒有傳送門時大家的操作是這樣的:比如在某個應用中看到一位明星的名字,想進一步了解,那么需要長按文字,選擇復制明星的名字,切換到瀏覽器,打開搜索引擎,長按粘貼文字,點搜索,才出現相關的服務。有了傳送門,只需要一步,即可達到相同的效果,極大的提升了用戶的效率。
直達服務
直達服務想解決什么樣的問題呢?我們可以先看看 PC 端用戶是如何使用服務的。
在 PC 端,除了游戲和部分專業軟件以外,絕大多數情況,用戶使用的都是瀏覽器,打開搜索引擎,搜索關鍵字,點擊 URL 進入服務網站,使用過程中可能還會通過鏈接進入到另一個服務網站,但整個過程是非常順暢的,不需要下載軟件,服務之間的跳轉連接也是無縫的。
但移動端卻不是這樣的,移動端服務的承載主要有兩種形式,網頁和應用,分別來看:
網頁在移動端和 PC 端的地位有著天壤之別,原因主要有兩個:
第一,移動端會用到大量的硬件能力,比如拍照、掃碼、定位、指紋、藍牙、傳感器,等等,但是大部分能力都沒有相應的 API 能夠讓網頁使用,這就意味著用網頁承載服務很可能并不完整;
第二,移動端的芯片能力比 PC 端還是要弱一些,但是界面的復雜性和要求卻很高,再加上前端技術的靈活性和歷史包袱,導致移動端網頁非常容易變得卡頓、慢、內存占用高,使用體驗非常糟糕,想做到流暢需要花費很高的代價,而且依然很難達到原生應用的效果。
而另一種承載形式——應用——同樣有兩個很嚴重的問題:
第一,想使用服務,必須先下載安裝應用,通常有幾十兆左右,可能用戶在外面需要流量下載,可能網絡速度比較慢需要等待 10 分鐘以上,而等到下載安裝完了,可能已經太晚用不上或者想不起來再用了,這中間有一個非常嚴重的斷檔等待期;
第二,應用的孤島現象嚴重,即便已經安裝了這些應用,你會發現,大部分應用之間依然無法無縫銜接,取而代之的是,一個應用中打開的是另一個服務的網頁,而網頁的體驗經常比較糟糕,而且可能承載不了服務,這就意味著用戶的操作流程可能會斷掉,需要手動切到另一個應用繼續接下來的操作,這對于用戶來說是難以忍受的。
而孤島現象的另一個重要體現在于很難做應用內搜索,大部分情況用戶還是只能到各個應用中分別搜索,而不是一個地方搜索全部內容。
理想的移動端服務形態,應該能夠像 PC 端瀏覽器一樣的流暢體驗,具體來說,就是能夠結合移動端網頁和應用的優點,既不需要下載安裝,功能服務又完整,還能達到原生般的流暢,服務間還能無縫打通和互相索引。我們覺得這樣的服務形態應該是未來很重要的一種形式,理應對此進行探索,所以才有了直達服務這個項目。
直達服務本身要解決的,是用戶使用服務的效率問題,盡量拋掉多余環節和預設條件,一步直達到服務本身。
總結
MIUI 作為國人非常喜愛的一個 Android ROM,一路走來,凝聚了大量小米人的心血和智慧,也匯集了非常多米粉的意見和需求,未來 MIUI 依然會堅持從用戶出發,探索更多更優的用戶體驗和技術能力,更好的服務所有的用戶。
題圖來自網絡
作者:董紅光,小米 MIUI 系統框架負責人。曾就職于 IBM 中國開發中心,2010 年加入小米,目前是直達服務技術平臺、系統框架、系統工具三個領域和團隊的負責人
本文由 @董紅光 原創發布于人人都是產品經理。未經許可,禁止轉載