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。