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 总结演讲