Android Q Labs| 通用系统映像介绍

3,197 阅读16分钟

开场白

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

今天我们尝试着用 GSI 来帮助各位开发者,看看有什么新东西可以来帮助大家。所以今天的主题大概会分为几个部分。 第一个部分我会先稍微介绍一下 GSI 以及我的 treble team在做什么东西。接下来我会介绍一下,为什么我们觉得 GSI 可以帮助各位开发者,如何帮助。第三个部分会介绍一下我们怎么使用 GSI 。

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 出来。

其实中间整个过程会变得非常的复杂,又有 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。

而且我们还保证一件事情: 我们之后版本出的新的版本的 Android,我们在使用这些 vendor 的 interface 即便有新的 interface,我们也要保证向前相容,也就是说我们在开发 Android 的过程当中,我们一定会想办法即便 Android 升到新版了,但是 vendor这边就算它的版本不往前走,就算它什么事情都没做,Android 也还是可以走到新的版本。

另外一个部分,有些人可能会知道,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 了 beta2、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 总结演讲