![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/2c782317c375994e5f441e2144ea2110750124bfd2a504365c2adba016e131fa.jpg)
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/1351cb39f910c06b245a0ae2464f6e1e9792c84ea2e48eeafe9c545f7c43ddb6.jpg)
一. 序
最新的 Android 版本 Q,已經發布了 Android Q Beta 3,雖然沒有正式釋出,但是不少使用者已經加入了測試計劃,搶先體驗 Android Q 的新功能。
近期不少體驗使用者反饋,自己的裝置升級到 Beta 3 之後,會出現觸不及防的強制重啟。谷歌方面已經確認,是執行了 Project Mainline 這個在 Android Q 中新加入的功能導致。谷歌在確認的同時也表示,這些問題會在之後的測試版本中修復,不會出現在正式版中。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/c9b06bba42fd2172b20cf9a0a81822c4e68afe25fb1c0cf8054b829563e867bb.jpg)
那什麼是 Project Mainline(後文簡稱 P-M) 呢?它是幹什麼的?又解決了什麼問題?
二. Project Mainline
2.1 P-M 解決什麼問題?
Android 能有今天的發展,得益於它系統原始碼的開源,又正是因為它的開源,導致碎片化嚴重。以至於在谷歌高速迭代 Android 系統版本的過程中,不少使用者在吐槽,Q 來了,O 還沒用上呢。
而碎片化又會導致各種問題,例如安全,隱私等問題。往往在系統中暴露出來一個問題,Android 團隊修復它,還需要等待漫長的時間,才能最終由廠商同步到使用者端。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/119dc096ffc490cec832aba29a9d0cc04df2cf9046fcc132b846572607336fcc.jpg)
中間環節太多,必然導致更新的緩慢,往往一個安全更新要經過半年甚至一年才能最終被廠商升級到使用者端,同時這些步驟中,還有一些是有時間重疊的。
![](https://i.iter01.com/images/6f7528277bb3cdfcbdede81337a98b3a1999e93feb4d2ec744e99d894e468e58.jpg)
上圖表示了谷歌和晶片製造商以及手機廠商之間的更新時間,這各個階段之間的任何重疊,都可能導致更新的失效。這就導致對於手機廠商而言,使用較舊的但是更穩定的 Android 版本,是更安全的做法。
為了解決這些問題,從 Android P 開始加入的 Project Treble 計劃,它就是現在 Android Q 中 Project Mainline 的基礎。通過 P-M 的支援,簡化並加快了 Android 生態系統的升級更新。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/c092f50d6d39c991ffd02c14c3b286d2a07d936b60e1ea782c24cce8333dd057.jpg)
上圖為 Project Treble 的計劃理想更新時間,在 Android Q 中,谷歌發現與系統級的更新相比,以“模組”為粒度的更新,是一種更有效的方式,這就引入了 Project Mainline 計劃。
P-M 可以通過 Google Play,使用一種類似更新應用程式的方式,更新系統的核心元件。這類更新可以無需等待手機制造廠商的 OTA 更新,直接觸達使用者,同時這些 Mainline 元件,在保證開源的同事,也不允許廠商直接修改,只能由 Google 來更新升級。初期提供的 Mainlin 元件,涉及到安全、隱私、一致性三個方面。
![](https://i.iter01.com/images/6ae51f5c94051e3369b8aac7994e7843c8d8bf38a8e8d14fb8892b2edbc915da.jpg)
到現在應該都知道 Project Mainline 的作用了吧?
簡單來說,Android 的碎片化導致更新困難,而一些重要的功能又迫切的需要及時更新到使用者側,例如安全類、隱私類等,谷歌開啟了 Project Mainline 計劃。Project Mainline 計劃將系統中,重要的“模組”封裝成一個個 Mainline 元件,通過 Google Play 的支援,使用一種類似更新應用的方式,在需要的時候,直接更新到使用者端,以此來解決碎片化所帶來的各種問題。
Proejct Mainline 讓你手裡的裝置更安全並且相容性更強了。
2.2 P-M 更新了那些東西?
初期 Project Mainline 支援的模組,主要涉及到安全、隱私和一致性三個方向。但是這種更新方式是通用的,後期不排除可能會攜帶一些常規更新。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/c6b1c27fbcc452c7fc8d0f11df8192a02d41febb39d858c9e7ffe870cf3ece17.jpg)
Project Mainline 包含的更新方向:
- 安全性:可以對關鍵的安全漏洞,提供更快的安全修復程式。例如媒體元件漏洞(佔最近修補漏洞的近 40%)。
- 隱私:隱私一直是 Android 關心的焦點,並且在版本更新中,一直投入大量的精力來更好的保護使用者資料並提高隱私標準。最主要的表現是對許可權系統進行更新升級,更好的保護使用者資料。
- 一致性:一致性主要影響裝置穩定性、相容性和開發人員使用 API 的一致性問題。
在 Android Q 中上,初始支援的元件包含:
- 安全性:媒體編解碼器、媒體框架元件、DNS 解析器、Conscrypt。
- 隱私:文件 UI、許可權控制器、ExtServices。
- 一致性:時區資料、ANGLE、模組後設資料、網路元件、登入元件、網路許可權配置。
分模組的好處就可以做到“手疼醫手,腳疼醫腳,哪裡不對點哪裡了”,讓每次更新更輕量級。
2.3 P-M 是如何運作的?
前面提到 P-M 主要是通過 Google Play,以一種類似更新應用的方式去更新這些 Mainline 元件,那它到底是如何運作的?
Mainline 元件最終以 APK 或者 APEX 檔案的形式交付。APK 我們很熟悉,而 APEX 是谷歌開發的一種新的檔案格式,類似於 APK。但是其根本區別在與,APEX 在系統啟動過程中,載入的更早。
因此,以前需要成為完整作業系統更新一部分的重要安全性和效能的更新,現在可以像更新應用一樣輕鬆的下載和安裝。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/214f90ad82b7083a2068330b1ac8402d29ced7f20e2794e1a54077f3e29a3152.jpg)
為了確保 Mainline 更細不會破壞原有的功能,還為此增加了保護機制和增加的測試流程,以確保每次更新都是經過全面測試以及完善的後備方案。
三. 小結時刻
Project Mainline 的本意是為了讓更新更快觸達使用者,以提高安全性、隱私和一致性等問題。雖然現在 Android Q Beta 3 中可能會導致強制重啟,但是問題已經暴露出來,後續解決它就很簡單了。
可能 P-M 的工程師覺得有更新,立即重啟一下就可以生效了,就給使用者強制重啟了,當然這也可能單純的就是一個 Bug。理論上如果不是很重要的元件更新,可能和重啟應用一樣簡單,就不需要對系統進行重啟,但是一些重要的元件更新,可能就需要重啟系統來確保它生效。
不過話說回來,再嚴重的問題,都已經執行在使用者端裝置上這麼久了,也不差這一天兩天的。參考 iOS 系統更新的策略就挺好的,立即更新或者在半夜空閒時更新。
這種單模組的更新,可能會讓開發人員和測試人員更迷惑,以前相容性的問題,只需要問清楚手機型號和系統版本,就可以針對性的做適配。現在好了,還需要弄清楚對應的 Mainline 模組的版本號,也許有些問題已經被谷歌偷偷的修復了,但是在使用者側還沒有及時更新。這時開發人員還是蠻尷尬的,你說我改還是不改?
你覺得呢?歡迎在留言區討論!
本文對你有幫助嗎?留言、轉發、收藏是最大的支援,謝謝!
references:
公眾號後臺回覆成長『成長』,將會得到我準備的學習資料,也能回覆『加群』,一起學習進步;你還能回覆『提問』,向我發起提問。
![讓最新的 Android Q Beta 3 強制重啟的 Project Mainline,到底是什麼?](https://i.iter01.com/images/877ffe0e02300235bbc14a76d946f1800b6892bb571cffbac97ea8a680482e3b.jpg)