Android Q Labs| 通用系統映像介紹

開場白

GSI 就是 genetic system image,也就是通用系統映像。android

今天咱們嘗試着用 GSI 來幫助各位開發者,看看有什麼新東西能夠來幫助你們。因此今天的主題大概會分爲幾個部分。 第一個部分我會先稍微介紹一下 GSI 以及個人 treble team在作什麼東西。接下來我會介紹一下,爲何咱們以爲 GSI 能夠幫助各位開發者,如何幫助。第三個部分會介紹一下咱們怎麼使用 GSI 。api

GSI 與 treble

GSI 的發展

在咱們開始講GSI以前,我要先回顧一下GSI究竟是怎麼來的,固然就是跟Android有關。安全

咱們講的 Android 其實指的是 IOS P ,以及 treble project。講到 Android,五月初的時候,咱們的 google 每一年都會辦的一件大事:google IO。工具

咱們 Android 第十年的版本 Android Q。 在 announce Android Q 的同時,咱們每一年還會再作一件事情,咱們會開始 release 所謂的 Android 的 Beta 版本,今年就是 Q 的 Beta 版本。 從各位開發者的角度,應該會想要趕快拿到 Q 的 Beta 版本。以便你能夠趕快測試新的 filter,或者是趕快測試一下新的 API 用起來是什麼樣子的感受。但是你們要怎麼拿到 AndroidQ 的 Beta 版本?一般第一個想法應該是去弄一臺手機,但事實上其實已經早就已經不是這樣了,若是您還有印象,其實這個是在 O 版的時候,咱們的確 Beta 就只有 pixel 能夠拿到 Beta 版本。
可是從在到了Android P 版的時候,咱們已經有八家廠商能夠在第一時間 Beta release 的時候,同時也拿到 Beta 的版本。一直到了今年 Q 版的時候,咱們已經增長到 13 家廠商,一共有21臺的 deluxe,能夠拿到 Q 的 Beta 版本。因此若是你手上有這些 deluxe,你立刻就能夠拿到 Q 的 Beta 版本。那爲何咱們能夠作到這件事情?爲何這些廠商有辦法在第一時間 Q Beta release出來,他就有辦法把它的的device升級到Q的Beta版本?這應該是一個很是冗長的時間纔有辦法能夠作到的,那是怎麼作到呢?最重要的就是咱們的treble project的努力。咱們從Q版開始run一直到P版到Q版,讓咱們的這些OEM的廠商升級變得很是的容易,並且快速。

treble project 作了什麼

容我再簡單介紹一下,到底怎麼樣,爲何,treble project 到底作了什麼事情?爲何有辦法可讓各個 OEM 廠商升級變得快速?

事實上咱們作的事情大概是這樣:咱們在之前來說,OEM 若是要升級,它必需要拿到新版的 IOS P,接下來再趕快作一些調整,調整可能會要花很是多的時間,最後他才能夠正式的 release 出來。post

其實中間整個過程會變得很是的複雜,又有 vendor 的改動,又有 Android 的改動,會很是的混亂。因此 treble project 要解決的問題就是 Android 的 fragmentation 的問題。這邊講的 fragmentation 的問題,並非表明咱們但願全部的 Android device 是所有都長得同樣,這不是咱們的目標。由於事實上 Android 不一樣的 device,咱們能夠經過 CTS 來保證它的 API,你們用起來都是同樣的。測試

因此咱們這麼在乎的事情是什麼?咱們在乎的事情是,咱們在市場上面同時存在太多的 Android版本,好比說咱們如今準備要出 Q 的版本,但市場上面可能還會有N、O、P、Q 這些版本,這個部分對於各個developer來說,實際上是一個很是困擾的事情,我相信你們若是在開發中,你但要去試最新的版本,還須要試以前的每個版本到底情況如何。因此版本多其實很困擾你們的。網站

爲了解決這個問題,咱們發現其實最重要的事情就是咱們要讓各個 OEM 在升級上變得更容易。因此咱們的作法是咱們把整 個Android 也分爲兩塊,一部分就是 Android 的 framework,稱做 system 的部分,以及底層跟 hallway 比較相關的部分,咱們叫作 vendor 的部分。中間咱們定義了一個界面,咱們稱它爲 vendor 的 interface。ui

並且咱們還保證一件事情: 咱們以後版本出的新的版本的 Android,咱們在使用這些 vendor 的 interface 即使有新的 interface,咱們也要保證向前相容,也就是說咱們在開發 Android 的過程中,咱們必定會想辦法即使 Android 升到新版了,可是 vendor這邊就算它的版本不往前走,就算它什麼事情都沒作,Android 也仍是能夠走到新的版本。google

另一個部分,有些人可能會知道,vendor 這邊其實或多或少會用到 Android 的一些系統的東西,一些系統的 library。這些東西,若是 Android 近版,對於這些 vendor 會是一個困擾:他怎麼知道新版會長什麼樣子呢?因此咱們定義了另一個東西叫作 VNDK,咱們會在 Android 裏面定義一組叫作 VNDK 的 library,並且咱們規定 vendor 的實現,必定必需要用 VNDK 裏面的 library 才能進行,並且咱們會保證在同一個 Android 裏的版本下,VNDK 必定是向前相融的。設計

咱們剛剛講到的是一樣的 Android 版本,若是是進了新的版本,VNDK 還有一個功能,你能夠考慮把舊版的 VNDK 放在 Android 的system 裏面。因此你能夠想象,你的 Android system 裏面可能就能夠同時存在不一樣的 VNDK 版本,讓同一個 Android 能夠相容於不一樣的 device(多是舊的,好比 P 版的 device 或者是新版的 Q 版的 device 都是有可能的)。經過這兩個東西,咱們就有機會讓 Android 在升級的時候,OEM 幾乎不用作任何事情,把 Android 升級。這也就是爲何咱們有辦法在這麼短的時間讓這麼多的 device 直接升到新的 Beta 版本。

treble 的價值:第一個最主要的就是咱們能夠幫助 IOS 進版。另外,咱們有機會作出同一個的 OS 映像,一個 system image,它能夠運行在不一樣的 device 上面,並且它能夠運行在不一樣 Android 版本的 device 上面。

GSI如何幫助開發者

接下來的我要介紹一下 GSI 的部分。

那到底什麼是 GSI 呢?

其實簡單來說,咱們已經成功的把 IOS P 誘出一個通用的 system image,能夠被用在任何的 Android 的 device 上面,只要這個 Android device 有支持 treble(就是它是呵護 treble 規範的 device),並且更棒的是,事實上從 P 版開始,任何從 P 版開始跑去的 device,都必定會支援 treble。

因此咱們有了 GSI 以後,就是 AOSP 徹底沒有改過的 Android,到底有什麼好處呢? 咱們能夠用這張圖來稍微看一下,再稍微再回顧一下,一個產品,從 AOSP 到 OEM 的 device 到底會發生什麼事情?

首先咱們 release 了這個 AOSP 部後,接下來第一件事情其實不是 OEM 廠商直接開始接手,一般都會是 SOC 廠商位於不一樣的 treble set,好比說 media take 等等。不一樣的廠商,拿 AOSP 以後把相關的東西改動,改完以後纔會是不一樣的 OEM 廠商 device,再拿了這些 SOC 改動的這些 package 以後,在 Android 以後再去作一些改動。

因此你們能夠想象兩件事情:第一件事情是整個過程是很是的長的。一般都是要花好幾個月的時間,從 AOSP release 一直到你的手機能夠 announce。第二件事情,若是說你是開發者,你拿到的 OEM 的 device 上面,或多或少都會有很是多非原生 Android 的改動。你如何保證你是能夠用在不一樣的 device 上面是沒有問題的?因此咱們的 GSI 其實就是 PO 的 Android,也就是 AOSP。你就能夠放在不一樣的 device 上。

因此咱們有一句口號:GSI 就是 pure and fresh Android,就是純淨並且新鮮的 Android(感受很像在賣水果)。

如何獲取 Android Q Beta

回到咱們的 Android Q,從今年開始,你們若是要拿到 Q Beta,一般有幾個管道:

  • 第一個管道就是你想辦法去弄一隻有 joining Beta program的device。
  • 第二個剛剛也有提到,若是你想要試試看 AOSP 有沒有改過,你能夠去 download 一下 Android studio。
  • 可是咱們如今又提供了另一個選擇,也就是 GSI,咱們就直接 release AOSP 原生的 GSI,你能夠用在不一樣的 device上。

因此你能夠換一個想法,它其實就像 Android studio 同樣,它是一個 EMAIL letter,可是它能夠被你拿來放在不一樣的真的 device 上面,並且使用真的 device 上面 hallway 的一個 EMAIL letter。 這個東西相信對你們開發是很是有幫助的。

GSI 對你們的幫助

對於 GSI 來說,咱們但願能夠幫助到你們幾件事情:

  • 第一件事情就是你不須要等到 Q 版真的 release 以前你就能夠提前開發你的 APP,甚至你能夠開始提前開發,使用新的 API 去作測試。

  • 並且還有一個很重要的事情是,若是你在這個過程中,發現新的 API 使用上會有一些問題,你是能夠反饋的,你不須要等到真的 Q版 release 的時候才發現這些問題,你的 APP 在最後真的 Q 版的 release dev 上面碰到問題,這時候纔開始修或是來回饋,這個其實都會有點晚。

  • 並且更重要的事情是除了你可使用你手邊的任何一個 device,即使它不是 Android Beta program 的 device,你也能夠來作相關的開發。

GSI的release 情況

目前來說,咱們的 GSI 從 Q 版開始,咱們的想法就是會去 adline Android 的正常的 release,因此從 beta 的 program 來說的話,目前咱們已經 release。咱們從 beta2 就已經開始 release,甚至比如今你們拿到的就算有 join beta2 program 這些 device 還要更早幾個版本。咱們已經 release 了 beta二、beta2.5 以及目前 beta3 的版本。

另外還有一點是事實上咱們知道各位開發者其實不必定只會用到 AOSP 的 API,可能會須要用到 GMS 的 API,因此咱們在 release 的時候除了 release pure Android 以外,咱們 release 的 GSI+GMS 讓你們能夠去測試新的 GMS 的 API。因此目前以 beta program 來說的話,咱們會努力從 beta 1一直到 beta 6,接下來可能就是正式的 Q 版 release。在同時咱們會 publish GSI 的 source code 到 AOSP 上面,到時候你們也能夠本身來 built GSI。

但是咱們知道 AOSP 上面並無 GMS,因此咱們等正式 release 以後,也會每一個季度 online 的 release GSI+GMS 給你們,若是你們有須要的話,能夠到 Android downcom 上面去下載這些 image 來使用。順帶一提,其實咱們目前 P 版GSI 的 source code 已經 publish 到 AOSP 了。

咱們大概整理一下幾個時間點,第一個像目前 beta 的話是到 developer.Android 的網站上面其實已經能夠下載了,目前的話有提供 arm64 的版本。另外就是咱們也提供了 X86-6位4的版本,以後咱們會作 publish 的部分並放在 AOSP 的網站上面,咱們順跟着 Android Q版一塊兒 publish 出去。另外事實上咱們從 P 版開始已經有 set up CI 也就是咱們會提供 daily built image 的部分,到時候 Q 版也會作一樣的事情。以後每一個季度的部分,咱們也會提供相關的 image,你們若是有須要的話,若是不想本身 built 的話,也能夠去下載這些 binary 的部分來使用。

何處去取 GSI

如何使用 GSI

GSI 的設備要求

第一個要求就是咱們如今 GSI 的話是相容於 P 版的 device,也就是 P 版之後你的 device 是從 P 版開始出的,但 P 版升級上來不算,爲了肯定這件事情的話,你們能夠 check一下first-api-level 的 system property,若是它是大於等於28,28就是P版,來肯定它是從 P 版開始 launch的,這樣 treble必定是相容的。 第二個部分的話,由於你要使用 GSI 其實有點像在刷機,因此你可能會須要有辦法把你的 device 作 unlock。第三個部分的話,就是要有辦法能夠把你的 verify bootdisable 掉,否則開機的時候可能會有些問題,因此若是有辦法作到這三件事情的話,基本上就可使用 GSI。

選擇 GSI

首先咱們目前的話有 P1 的版本或者是 Q 的版本,剛剛也有提到能夠找到這些 image 的地方,或者是你能夠本身 built。 另外的話就是你可能要確認一下,由於咱們有提供不一樣的的版本,包括 arm64 或者是 X86-64 等等。一般來說應該大部分的 device 幾乎都是 arm64 的,因此咱們這個部分必定會提供。

安裝 GSI

主要有三個部分: 首先你要可以先 unlock device,接下來就是 disable verify boot,最後就是安裝

整個過程你可能會須要一些工具或者是使用說明,最主要的緣由是作這些動做每一家 device 有點不太同樣,你可能須要先去查一下你的 device 要如何 unlock 以及 disable verify boot 的方法,對於 Pixel 或者是大部分的 device 來講的話 fastboot 已經足夠了。

Pixel 示例

首先第一件事情,經過 fastboot 來作 flashing unlock 的動做。 作完以後能夠看到你的 device 狀態從 lock 變成 unlock,就是綠色變紅色的部分。接下來的話就是要來作 disable verify boot的部分,以 Pixel 來說的話,咱們有提供一個 vbmeta.img,你只要捎到 vbmeta 裏面去用上面這個指令,就能夠 verify boot disable掉。接下來一個動做就是咱們結束前面兩個動做以後,fresh GSI 到 system partition 上面去,接下來把你的 device wipe 而且 reboot 以後就能夠進入到 GSI 裏面去。

Dynamic System Update

講到這邊的話,固然可能會以爲要 unlock device 或者 disable verify boot 是一件麻煩的事情,對大部分來說應該是很是麻煩的一件事情,尤爲是有些可能根本沒辦法 unlock 的 device。

因此咱們在 Android Q 的版本的時候作了一個新的功能,這個功能叫作 Dynamic System Update。

這個功能就是隻要把你的 GSI 放到 device 上面,而且啓動 DSU,這時候 DSU 就會幫你把 device 開機直接開到 GSI 裏面去,這整個過程中你徹底不須要作 unlock 這個動做,也不須要作 disable verify boot 的動做。更棒的是當你進到這個 GSI 以後,作完測試你是能夠很容易地在 roll back 回本來的 os 裏面去。

啓動DSU的兩種方式

啓動DSU大概有兩種方式:

  • 第一種方式的話目前可能會須要廠商來實作,基本上 DSU 是有提供 API 的,若是廠商願意的話它能夠透過 API 來實作一個叫 image picker 的一個 APP 來幫助你們透過 API 把 GSI 安裝到 device上,而後開到 GSI 裏面去,並且它可能還能夠幫忙多作一些事情,好比說去列出全部 GSI 的不一樣版本而後讓你去選擇。

  • 另一種方式是咱們也有提供 adb command,細節的話你們以後能夠 search 到相關的 command。透過這些 command 也能夠作一樣的事情,就是把 image push 到相關 device後,下一個 DSU 的 command 就能夠直接開機開到 image 裏面去。

DUS使用模型

首先看你有沒有 image picker,若是有的話,使用者直接在這個界面上面選一個 GSI,而後開進去,進而作任何你想要作開發的事情。沒有的話就是透過 adb command 把 image 放到 device 上,而後同樣啓動 DSU,當你作完想作的開發以後,reput 即可以回到本來的 OS 裏面。

因此你們能夠想象這個能幫助你們作什麼事情?最主要就是你能夠來作 AB test。 AB test 包含你這個應用到底在 pure Android 裏面以及 OEM 改過的 Android 上面的行爲是否是有不同?或者是好比說在將來咱們有 R 版的時候,你也可使用 DSU 來把你的 device 切換到 R 版,而且在不一樣的版本之間去測試你的 APP 在不一樣的 API level 下面跑起來的情況是什麼樣子,有沒有什麼問題。

使用GSI方法的限制

  • 第一個是手動的方式,也就是刷機的方式的話,你一般須要用到 fastboot,這種方式下你的 device 是必須可讓你 unlock。
  • 另一種若是你想用自動的方式,就能夠嘗試使用 DSU, 不過 DSU 有一個限制:爲了不有一些安全性問題,咱們 DSU 設計師必定要經過有 sign 過的 GSI,你才能夠開得進去。對於廠商來說,device 除了有 DSU 這個功能以外,必需要可以承認有 sign 過的 GSI 或者是它自身有 sign 過的 image。因此若是說大家手邊有一些 device,你很想要用 GSI 可是卻發現廠商並無開放這些功能,建議能夠跟你的廠商稍微溝通一下。

GSI相關總結

  • 第一個部分就是咱們如今已經有 GSI 了,並且它是安卓 release 的一個部分。
  • 第二個從 Android Q 開始,你可使用 DSU 來使用 GSI。
  • 最後若是你在使用 GSI 有任何問題的話,咱們目前都已經開了 GSI 相關的 catagory,因此你能夠在 AOSP 上面發 bug 給 GSI 的 catagory,咱們這邊都會盡可能來幫你們解決。

GSI相關資料

最後是幾個關於咱們GSI的資料,第一個就是相關消息咱們都會發布在 Android 的 blog 裏面,以及咱們如今在 reddit 上面有安卓 GSI 的一個使用者,因此會發布相關的消息,另外下載的部分咱們能夠到 developer.android,或者是到 source android 的部分搜尋 GSI,你就能夠找到相關的訊息及 image。

這裏是相關的Urcode。

Android Q Labs 直播專題頁面

Android Q Labs 開場演講

Android Q 有哪些更新

Android Q 現代化您的應用

後臺 Activity 啓動的限制

Android Q 分區存儲

Android Q 手勢導航

Jetpack 更新

Android Q 在摺疊屏設備的適配

Google Play 商店政策

Android Q 地理位置權限變動

Android Q 深色主題

Android Q Labs 總結演講

相關文章
相關標籤/搜索