GSI 就是 genetic system image,也就是通用系統映像。android
今天咱們嘗試着用 GSI 來幫助各位開發者,看看有什麼新東西能夠來幫助你們。因此今天的主題大概會分爲幾個部分。 第一個部分我會先稍微介紹一下 GSI 以及個人 treble team在作什麼東西。接下來我會介紹一下,爲何咱們以爲 GSI 能夠幫助各位開發者,如何幫助。第三個部分會介紹一下咱們怎麼使用 GSI 。api
在咱們開始講GSI以前,我要先回顧一下GSI究竟是怎麼來的,固然就是跟Android有關。安全
咱們講的 Android 其實指的是 IOS P ,以及 treble project。講到 Android,五月初的時候,咱們的 google 每一年都會辦的一件大事:google IO。工具
事實上咱們作的事情大概是這樣:咱們在之前來說,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 版本。
其實簡單來說,咱們已經成功的把 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,從今年開始,你們若是要拿到 Q Beta,一般有幾個管道:
因此你能夠換一個想法,它其實就像 Android studio 同樣,它是一個 EMAIL letter,可是它能夠被你拿來放在不一樣的真的 device 上面,並且使用真的 device 上面 hallway 的一個 EMAIL letter。 這個東西相信對你們開發是很是有幫助的。
對於 GSI 來說,咱們但願能夠幫助到你們幾件事情:
第一件事情就是你不須要等到 Q 版真的 release 以前你就能夠提前開發你的 APP,甚至你能夠開始提前開發,使用新的 API 去作測試。
並且還有一個很重要的事情是,若是你在這個過程中,發現新的 API 使用上會有一些問題,你是能夠反饋的,你不須要等到真的 Q版 release 的時候才發現這些問題,你的 APP 在最後真的 Q 版的 release dev 上面碰到問題,這時候纔開始修或是來回饋,這個其實都會有點晚。
並且更重要的事情是除了你可使用你手邊的任何一個 device,即使它不是 Android Beta program 的 device,你也能夠來作相關的開發。
目前來說,咱們的 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 的話是相容於 P 版的 device,也就是 P 版之後你的 device 是從 P 版開始出的,但 P 版升級上來不算,爲了肯定這件事情的話,你們能夠 check一下first-api-level 的 system property,若是它是大於等於28,28就是P版,來肯定它是從 P 版開始 launch的,這樣 treble必定是相容的。 第二個部分的話,由於你要使用 GSI 其實有點像在刷機,因此你可能會須要有辦法把你的 device 作 unlock。第三個部分的話,就是要有辦法能夠把你的 verify bootdisable 掉,否則開機的時候可能會有些問題,因此若是有辦法作到這三件事情的話,基本上就可使用 GSI。
首先咱們目前的話有 P1 的版本或者是 Q 的版本,剛剛也有提到能夠找到這些 image 的地方,或者是你能夠本身 built。 另外的話就是你可能要確認一下,由於咱們有提供不一樣的的版本,包括 arm64 或者是 X86-64 等等。一般來說應該大部分的 device 幾乎都是 arm64 的,因此咱們這個部分必定會提供。
主要有三個部分: 首先你要可以先 unlock device,接下來就是 disable verify boot,最後就是安裝。
整個過程你可能會須要一些工具或者是使用說明,最主要的緣由是作這些動做每一家 device 有點不太同樣,你可能須要先去查一下你的 device 要如何 unlock 以及 disable verify boot 的方法,對於 Pixel 或者是大部分的 device 來講的話 fastboot 已經足夠了。
首先第一件事情,經過 fastboot 來作 flashing unlock 的動做。 作完以後能夠看到你的 device 狀態從 lock 變成 unlock,就是綠色變紅色的部分。接下來的話就是要來作 disable verify boot的部分,以 Pixel 來說的話,咱們有提供一個 vbmeta.img,你只要捎到 vbmeta 裏面去用上面這個指令,就能夠 verify boot disable掉。接下來一個動做就是咱們結束前面兩個動做以後,fresh GSI 到 system partition 上面去,接下來把你的 device wipe 而且 reboot 以後就能夠進入到 GSI 裏面去。
講到這邊的話,固然可能會以爲要 unlock device 或者 disable verify boot 是一件麻煩的事情,對大部分來說應該是很是麻煩的一件事情,尤爲是有些可能根本沒辦法 unlock 的 device。
這個功能就是隻要把你的 GSI 放到 device 上面,而且啓動 DSU,這時候 DSU 就會幫你把 device 開機直接開到 GSI 裏面去,這整個過程中你徹底不須要作 unlock 這個動做,也不須要作 disable verify boot 的動做。更棒的是當你進到這個 GSI 以後,作完測試你是能夠很容易地在 roll back 回本來的 os 裏面去。
啓動DSU大概有兩種方式:
第一種方式的話目前可能會須要廠商來實作,基本上 DSU 是有提供 API 的,若是廠商願意的話它能夠透過 API 來實作一個叫 image picker 的一個 APP 來幫助你們透過 API 把 GSI 安裝到 device上,而後開到 GSI 裏面去,並且它可能還能夠幫忙多作一些事情,好比說去列出全部 GSI 的不一樣版本而後讓你去選擇。
另一種方式是咱們也有提供 adb command,細節的話你們以後能夠 search 到相關的 command。透過這些 command 也能夠作一樣的事情,就是把 image push 到相關 device後,下一個 DSU 的 command 就能夠直接開機開到 image 裏面去。
首先看你有沒有 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的資料,第一個就是相關消息咱們都會發布在 Android 的 blog 裏面,以及咱們如今在 reddit 上面有安卓 GSI 的一個使用者,因此會發布相關的消息,另外下載的部分咱們能夠到 developer.android,或者是到 source android 的部分搜尋 GSI,你就能夠找到相關的訊息及 image。