天天看點

讓舊手機運作 Android O? 看看 Android Go 是如何做到的

讓舊手機運作 Android O? 看看 Android Go 是如何做到的

Android Go 是谷歌基于 Android 8.1 Oreo 的精簡版 Android 系統,是成為針對 1GB 或更低記憶體的低端裝置的 Android 優化版。Android Go 是為下一代入門級裝置開發的,為的是確定開發中國家的消費者仍然可以使用功能正常的智能手機來通路網際網路并使用應用程式。

Android Go 擁有各種性能優化和改進,比如其記憶體占用比普通 Android O 少一半,裝置平均運作速度比在同一裝置上安裝正常的 Android O 快 15%。這些優化是通過谷歌制作的一些專門的建構配置完成的,将在後面進行解釋。

讓舊手機運作 Android O? 看看 Android Go 是如何做到的

Android Go 還益于特殊的 “Go” 系列應用程式,比如 Files Go,YouTube Go 和 Google Maps Go。這些是由谷歌制作的輕量級版應用,不那麼吃配置。這意味着那些使用 Android Go 裝置的使用者可以擁有标準的 Android 系統體驗,開心地使用谷歌全家桶,無需購買昂貴的旗艦手機。

這關乎谷歌擴大智能機市場的計劃。但是開發者們可能會有疑問,如果 Android Go 主要基于建構配置和一套優化過的谷歌應用組成,那麼開發者是否可以自己建構一個 “Android Go”?答案是肯定的。

一些 LineageOS 開發者已經在開發擁有 Android Go 優化的 ROM

已經有一部分開發者對 Android Go 十分感興趣,比如 XDA 認可的開發者 AdrianDC,正在做 LineageOS 15.1 上的工作,同時也在進行針對幾款老式索尼手機的 Android Go 配置建構 。上面提到的索尼裝置是索尼 Xperia SP,索尼 Xperia T,索尼 Xperia V 和索尼 Xperia TX。這些裝置已經是五六年前推出的 “ 準古董 “ 了,但是他們将會得到擁有 Android Go 優化的 LineageOS 15.1,這可能會讓這些 “ 準古董 “ 流暢地運作 Google “Go” 系列應用程式。

任何獨立的 LineageOS 開發者都應該可以引入一個 Android Go 的建構配置,使得 LineageOS 成為 Android Go 優化和其他優化的綜合版本。這意味着那些可能購買了索尼 Xperia T 的人,昨天手機還在運作 Android 4.0.4,明天就能夠用上 Android 8.1,以及最新的 YouTube Go 和 Google Maps Go 等應用程式。

Android Go 如何幫助老 Android 手機運作 Android Oreo

Android 上的配置建構是一組與 Android 系統各個方面相關的參數,這些參數通常這會改變系統的行為,而 Android Go 主要就是針對建構配置進行優化。

讓舊手機運作 Android O? 看看 Android Go 是如何做到的

如果想讓 Android Go 發揮作用。其中一些配置建構必須在重新編譯的情況下才能修改,并且會成為 ROM 藍圖的一部分。但是這涉及諸如 Android 在存儲和記憶體使用等多個方面,包括自動存儲管理,Android 低記憶體殺手,dalvik 可執行檔案 ( DEX ) ,優化和針對應用程式的 RAM 限制。而 APK 檔案由 DEX 檔案組成,是以你可以将 APK 檔案看成一個包含許多 .dex 檔案的 ZIP 檔案。另外,自動存儲管理将由 Files Go 來控制,而不是讓 Android 系統控制。

Android Go 參考了 Android 的低 RAM 模式

在 Android 4.4 KitKat 中,谷歌推出了一個名為 “low-ram” 的新标志,旨在支援隻有 512MB 記憶體的裝置。它對系統進行了一些優化,這些改變對于低 RAM 裝置是非常有效的。

  • 已驗證的記憶體節省核心配置:切換到 ZRAM
  • 如果未被緩存或者緩存太大,殺死這個程序
  • 不要讓大型服務把自己歸類到 A 服務裡(避免啟動器被誤殺)
  • 如果程序在空閑維護中變得過大,殺死這個程序
  • 序列化的背景服務啟動
  • 調諧低 RAM 裝置的記憶體使用:更嚴的記憶體不足預警級别,更小的圖形緩存等
  • 修改 system_server 和 SystemUI 程序
  • 在 Dalvik 預載 dex 緩存
  • 經過驗證的 JIT-OFF 選項
  • 減少了每個程序的字型緩存占用
  • 引入 ArrayMap / ArraySet,并在架構中廣泛使用,作為 HashMap / HashSet 的輕量級替換

Android Go 使用修改的低記憶體殺手和 dex 優化

鑒于 Android Go 主要用于記憶體為 1GB 或更低的裝置,還需要進行更積極的記憶體管理。Android Go 以幾種不同的方式修改低記憶體殺手 ( low memory killer ) 。首先,當大量的 RAM 被消耗時,低記憶體殺手将進入 “ 臨界壓力 “ 狀态。這是因為當記憶體使用率變得過高時,裝置存儲上的交換檔案被頻繁通路,系統就會變卡。保持 RAM 有足夠的空餘能避免系統不停地使用交換檔案或者爆記憶體。

通過将各種基本服務以及 WiFi 服務設定為 “ 速度檔 “,可以讓這些服務進行提前編譯,可以減少 RAM 的使用和存儲。同時共享 APK 被設定為 “ 加速 “,通過優化 dex 指令來獲得更好的性能,進而延長電池壽命和額外的 CPU 周期。

在 dex 優化方面,Android Go 做了很多,比如對不常用的應用進行降級處理。此處降級并不是說應用程式的實際版本号會被降低,而是指這個應用程式的 dalvik_cache 将被清除。使用 Dalvik 緩存是為了使裝置不用重新編譯應用程式,而隻編譯最需要的部分并對其進行緩存。其餘部分在應用程式運作時使用 Just in Time(JIT)編譯器進行編譯。但是如果應用程式在 10 天内沒有使用,那麼預編譯的應用程式的主要部分也将被删除。這樣做是為了釋放盡可能多的空間。另一個簡單的變化是不允許應用程式的 RAM 使用超過 256MB,以至于應用程式無法使用裝置上的所有 RAM。

Android Go 将成為低端裝置定制 ROM 的未來嗎?

目前并不能下一個定論,但是對于舊裝置上的自定義 ROM 開發來說,前景很光明。雖然在裝置上運作最新版本的 Android 可能還有其他問題,但從理論上說,基于 Android O 并進行了優化的 Android Go 肯定比 Android 4.4 用起來要舒服多了。

原文釋出時間為:2018-11-25

本文作者:yuer

本文來自雲栖社群合作夥伴“

終端研發部

”,了解相關資訊可以關注“

”。

繼續閱讀