Android O 之一:Android Treble 計劃

Android O 前期預研

之前一直傳言android O的推出會包含有兩部分的主要功能:

  • 谷歌打算徹底解決Android版本碎片化的問題,會在Android O上推出一個新的框架設計來解決這個這個升級問題。
  • 推出Android for Automotive ,正式進軍汽車車載市場。

而這兩部分對我們的工作影響會比較大,第一部分可能會導致我司現存的一堆現有的工作會在以後可能不存在了。因爲整個系統升級項目的工作量大大減輕。第二部分會引領出一個新的智能車載時代,所以出於這個原因,有必要儘早對Android O做一些前期調研。

Android Treble 計劃

Android O 引入一個新的計劃被命名成“Android Treble ”,按照谷歌的定義,這個計劃的目標是”The Android 8.0 release includes Project Treble, a major re-architect of the Android OS framework designed to make it easier, faster, and less costly for manufacturers to update devices to a new version of Android. Treble is for all new devices launching with Android 8.0 and beyond (the new architecture is already running on the Developer Preview for Pixel phones).” 簡單翻譯一下就是“該計劃的主要工作就是重構Android OS 的framework,讓Android設備製造商能夠更快,更容易,更低成本的去升級Android 版本”

Google已經正式release了Android O AOSP r4版本,我們已經可以通過公司鏡像/google 官方鏡像/國內其他Android 鏡像下載Android O AOSP代碼。我們打算先編譯一個Android O 的angler版本(Nexus 6P)。我們先來比較下Android O的angler版本與Android M的hammerhead版本的(Nexus 5)差異:

▲差異一,Binaries Driver 打包方式差異,我們都知道Google會推出一些官方手機,可以直接運行Android AOSP鏡像,但是爲了支持這樣一個功能,Google都會提供 Binaries Driver包,這些包都是硬件相關的驅動或者HAL庫。在Android M的hammerhead版本上,我們看到Binaries Driver 的組織方式是這樣的: 
這裏寫圖片描述 
我們能夠看到Binaries Driver 打包裏有各種so庫,apk文件,bin文件跟各種配置文件。

但是我們看到Android O的angler版本的Binaries Driver 是這樣的:

這裏寫圖片描述

除了Android.mk文件之外,我們只能看到一個vendor.img鏡像,除此之外再沒有其他so文件,bin文件跟各種配置文件。

▲差異二:編譯出的鏡像有差異,從Android O angler版本編譯出的結果來看,如下圖所示,編譯結果中多出一個vendor.img的鏡像。而在Android M的hammerhead版本的編譯結果中是沒有的。

這裏寫圖片描述

vendor.img 鏡像解壓: 
1) 將Android sparse image格式的vendor.imag轉換成e普通格式:simg2img vendor.img vendor.img.ext4 
2)mount 鏡像:sudo mount -t ext4 -o loop vendor.img.ext4 /tmp/vendor/ 
我們可以看到vendor鏡像中的內容:

這裏寫圖片描述

與System.img中的目錄結構很類似。從直接現象來看,我們有理由猜測Android O與之前的Android 版本相比,多出了一個vendor.img分區。接下來很多的分析都是圍繞vendor.img鏡像來展開。vendor.img鏡像也是Android Treble計劃最重要的核心與成果。

Android O之前版本的框架:

在此之前的Android 系統架構當中,Android Framework 與Android HAL是打包成一個system.img的,而且Framework 與HAL之間是緊耦合的,通過鏈接的方式使用相應的硬件相關so庫。老版本的android 的系統框架當中framework與HAL之間的一般架構框架是: 
這裏寫圖片描述 
所以每次Android framework的升級需要對應的Android HAL升級。所以這樣每次Android 升級都需要Android 設備製造商投入大量的人力物理去升級相應的Vendor HAL Implemetation. 
這裏寫圖片描述

Android O及之後的版本的框架:

在Android O以及以後的版本當中,Android 更新了新的框架設計在新的框架設計當中,引入了一套叫HIDL的語言來定義Freamework與HAL之間的接口,新的架構如下圖: 
這裏寫圖片描述 
在下一節中,我們將來詳細瞭解HIDL這個新概念。跟以往的Android 版本相比較,Android O裏使用HIDL來解耦Android Framework 與Vendor HAL Implemetation之間的關係,從而簡化降低Android系統升級的影響與難度。並且目前看起來,Android Framework與Vendor HAL Implemetation會存放在不同的分區當中,Android Framework會在system分區當中,而Vendor HAL Implemetation會在一個新定義的分區(Vendor.img)當中,這樣刷新的system.img 纔不會影響到Vendor HAL Implemetation,所以在Android O中的升級方式變成以下方式: 
這裏寫圖片描述

在這裏先大致介紹了下 Android Treble計劃的背景,以及比較High Level的介紹了下大致框架,後續會從更加詳細的角度研究下 Android Treble計劃。 
後續會有以下部分:

  1. Android HAL 類型
  2. HIDL的相關介紹
  3. VNDK相關Vendor Native Development Kit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章