iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
0
Mobile Development

Android Pie 底層開發學習心得系列 第 6

[Day-06] Android HIDL (1) Treble

  • Guide:
    • Treble 是什麼?
    • Treble 架構
    • HIDL 概述
    • HIDL 編碼規範
    • HIDL 中的 hidl-gen 使用
    • HIDL interface 和 package
    • HIDL import & inheritance
    • HIDL 實作

Treble 是什麼?

我們先來探討這件事背後的目的:

  1. Android 版本碎片化嚴重,而且版本更新緩慢為人詬病很久了。
  2. 伴隨 Google「親兒子」Pixel 系列手機的來到,推出的同時勢必要讓用戶使用感受良好。
  3. Android 版本釋出的生命週期:Android 版本更新都要等 OEM 驅動更新後才可釋出。

https://ithelp.ithome.com.tw/upload/images/20190921/20120515cx5itMWnoS.png

綜合上述三點目的看來,

簡單來說,Treble 的意義就是將先前最礙眼的 HAL 大翻修,

Android 8.0 Project Treble 將所有 OEM 自訂的部份,

和 Android OS 原生程式碼獨立出來。

所以在 Treble 出現之前,vendor 區塊和 Android Framework 是綁在一起的。

編譯的時候會將 HAL 和 Framework 一起產生出 system.img 來更新:

https://ithelp.ithome.com.tw/upload/images/20190921/20120515SPMcNFUHJR.png

Treble 出現之後,所有 vendor 自定義的區塊都可以單獨更新,

產生 vendor.img 放在裝置上獨立的 vendor 分區中,切得乾乾淨淨的。

https://ithelp.ithome.com.tw/upload/images/20190921/20120515jLJY7P4t1e.png

更扯的是假如修改一個 AOSP ROM 後,

這個 ROM 可刷到目前支援 Treble 的任何一個裝置。

只差在某些硬體元件上的差異,但系統卻可以運作正常,

為什麼呢?這都要多虧系統耦合性大幅降低的關係。

正所謂亂世出英雄,分久必合、合久必分啊!


Treble 架構

在 Android 8.0 之前,HAL 是一個一個的 .so 函式庫,

通过 dlopen 来進行開啟,和 framework 位於同一個 IPC 進程中。

現在為了舊版能順利地更新到 Android 8.0 以上,

Android 設定了 Passthrough 和 Binderized 模式。

對於 Android 8.0 之前的版本,如圖 1.

舊版升級到 Android 8.0 版本的過程,如圖 2. 圖 3.

直接在 Android 8.0 之後的版本開發,如圖 4.

https://ithelp.ithome.com.tw/upload/images/20190921/20120515KR70jWiJh6.png

  1. Passthrough:兼容舊版的 HAL 模式 (同一個進程)

    https://ithelp.ithome.com.tw/upload/images/20190921/20120515nfW7xTbA23.png

  2. Binderized:用 Binder 方式來進行 IPC (不同進程: 多了 HW Service Process)

    https://ithelp.ithome.com.tw/upload/images/20190921/201205150PaDMM7EBk.png


Reference:

Here comes Treble: A modular base for Android


上一篇
[Day-05] Android 架構解析 (2) framework & App
下一篇
[Day-07] Android HIDL (2) 概述
系列文
Android Pie 底層開發學習心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言