Android工程师带你解密AndroidQ

Android工程师带你解密Android Q

打开凤凰新闻,查看更多高清图片

作为Ars在Google I / O的传统,我们最近与一些制造Android的人一起坐下来了解有关Google最新操作系统的更多信息。2019年的谈话全部是关于Android Q和今年的重大工程努力,Project Mainline。Mainline的目标是让谷歌(有时是OEM!)直接更新操作系统的核心部分,而无需推出整个系统更新。

今年运行Ars Android Interview Gauntlet,我们的资深受访者Dave Burke-Android工程副总裁。作为Android团队的负责人,Burke可以说是Android知识的百科全书,在采访回答一系列深刻问题时也总是妙语连珠。连续第二年回归的是Iliyan Malchev,Android的首席工程师,Project Treble的领导者,以及全面的Linux集成大师。

但是为了助力这次最新的深度潜水,Ars还加入了Android的高级工程总监Anwar Ghuloum和Project Mainline的领导。从今年的I / O头条新闻中可以看出Ghuloum的洞察力特别受欢迎:作为“下一个伟大的Android更新项目”,Mainline很容易在大会上引起重大新闻。

那么在开始接下来精彩的Android Q(&A)之前,你得了解一些Mainline的背景知识。

项目主线:Android OS开发中的“根本转变”

多年来,我们已经看到谷歌通过不断的努力将Android变的更易于更新。Android的早期,谷歌应用程序和核心系统应用程序被卸载到Android应用商店,允许谷歌在需要时推出面向用户的新功能。谷歌Play服务花了很多开发者的API,卸载那些到Android应用商店;允许谷歌泵出时,它又要面对开发人员的API更新。最近,Android 8.0为我们带来了Project Treble,它将支持操作系统与硬件分开,从而更轻松地进行更新开发。

在Android Q中,新的模块化工作是“Project Mainline”。与谷歌早期将Play应用程序放入Play商店的行为一样,Mainline模块化了几个核心系统组件并将其移至Play商店。Mainline比表面级应用程序更深入到系统中,但这些是系统功能的大块,如媒体框架和ART,Android RunTime。

Android的(更新)历史记录

传统上,Play商店仅以APK文件的形式分发应用程序,但相对于Project Mainline中的许多模块化组件,如果打包为APK,它们将无法工作。由于APK系统是为系统和用户级应用程序构建的,因此在权限和启动过程中什么时候打开会有一些限制。为了模块化这些核心组件,Google提出了比APK更强大的东西:“APEX”文件类型。APEX文件具有基本的根级权限,并且它们可以很早地启动启动过程,从而允许Google(或OEM)更新更多组件。APK文件是系统和用户级应用程序的包,APEX文件是核心系统组件的包。此表显示第一个Android Q版本中的APK文件和APEX文件:

Android Q的Enlarge / Google项目主线组件。

谷歌

在未来,我们可能会看到Project Mainline模块越来越多地包含Android系统。然而,对于第一个Android Q版本,Google选择专注于三个主题:“一致性”,“安全性”和“隐私”。在我们的I / O采访之前,Google向我们提供了Android Q中项目主线组件的上表,详细说明了哪些组件正在模块化以及OEM的建议是什么。这就把我们带到了第一个问题。

以下是采访内容:

Ars:所以我有这个Project Mainline表,详细说明了推荐或未推荐的组件。你是如何选择什么是强制性的?

项目主线负责人Anwar Ghuloum:  理想情况下,我们希望一切都是强制性的。我们处理这些模块的方式是与我们所有的设备制造商交谈并说:“嘿,我们正在这样做,与我们合作。” 他们将一堆代码上传了。他们有很多未来的要求,他们正在开始工作的过程,而且,对于那些我们可以真正满足所有这些要求的模块,我们强制要求。对于仍然存在差距的模块,我们将其作为此版本的可选项,对于下一版本,它们将是强制性的。所以这给了我们时间来获得平价,因为我们不想回归他们的设备体验,但推动这些模块,我们希望确保他们的东西进入。

Dave Burke,工程副总裁:  我认为这项工作的一部分正在与我们的合作伙伴共同进行。当我说伙伴时,我说的是设备制造商。他们将更改添加到他们构建的设备中,并且我们希望将它们全部升级到主线代码分支,因此我们保持一致性。这需要时间。

Ghuloum:是的,我的意思是,我们已经完成了大量的上游工作。太奇妙了。对于其中一些套餐,我们在过去的一年中比在过去10年中上升了更多。

伯克:是的,这很重要。

我认为这里的部分背景是Project Mainline代表谷歌收回来自OEM(又名设备制造商)的一些核心系统代码的最终所有权。如果设备制造商要放弃该代码的所有权,那么Google希望确保现在所有用于添加的自定义设备都支持在每个人都使用的普通AOSP(Android开源项目)代码库中。

你可以想象谷歌围绕每个模块的生态系统,并询问“你真的需要自定义DNS解析器的工作方式吗?” 当答案是“不”时,谷歌的版本是强制性的。对于答案是“实际上......”的模块,计划是在AOSP的Google版本的上游,并最终采用谷歌版本。Ghuloum声称,一些包装能够“在过去的一年中比上一年更多地上游”,这听起来像他们取得了很大的进步。将更多代码上传到AOSP意味着更少的代码可以跟踪OEM,从而实现更简单,更简单的系统更新。 

放大 /项目主线的初始重点。

谷歌

Ghuloum:  我们向团队解释的是,使用Mainline模块的前提是您每个月都会发布一次。您正积极与合作伙伴合作,共同开发,规划您的路线图以及类似的东西。团队中的人们对此非常不满,并为此感到兴奋。

Ars:哦,这个计划是一个每月一次的Mainline模块版本吗?

Ghuloum:嗯,这是我们训练有素的节奏,这是由我们的安全更新计划驱动的,因为有些组件是安全敏感的。特别地,媒体组件主要包括编解码器和提取器。模块的一个原因是我们查看了去年的漏洞,我们的安全更新中有近40%的补丁漏洞来自这些模块。 所以,我们就像是,“嘿,如果我们可以把它们推到整个生态系统中,而不是给OEM带来负担,测试它们,并将它们自己推出,那该怎么办呢?”

Android的媒体播放引擎必须从Web上加载各种可怕的文件类型,并且以安全的方式这样做一直是一个安全挑战。Android的媒体播放引擎被称为“Stagefright”,这个名称可能会在2015年的新闻周期中识别出来,当时   在Stagefright引擎中发现了一系列  远程代码执行  漏洞。Ghuloum正在讨论的正式月度安全更新计划是为了应对这些漏洞而启动的,并且媒体框架的强化一直持续到今天。

今天,Google每个月都会生成AOSP安全更新,并将其交给OEM,但这仍然不是一个完美的解决方案。并非每部手机都支持每月安全更新,并非每部手机都能及时每月发送这些更新,大多数手机仅支持两年。正如Ghuloum所说,除了谷歌接管测试,集成和推出这些修补程序之外,Project Mainline还将(最终,一旦所有内容都在Android Q上)让Google每月将这些修复程序推广到整个生态系统而不是只是几款旗舰手机。 

Burke:  另一件事是,我们经常听到开发人员在Android上如何让他们的生活更轻松。其中一个经常出现的问题是操作系统不同部分的行为略有不同,甚至在同一制造商中也是如此 - 媒体框架是他们提出的。因此,更加一致,对开发人员也有好处。它减少了错误和他们必须完成的工作,并提高了应用程序的质量,这对用户有利。

Ghuloum:我昨天称之为“bug一致性”。

伯克:(笑)虫子一贯!对,是真的。

Ghuloum: 这个模块名为“ANGLE;” 它基本上是在Vulcan上实现的OpenGL。现在它对OEM来说是强制性的,但开发人员可以选择是否使用它。我们的想法是倾向于对所有这些设备上出现的Vulcan提供支持。拥有一致的GL实现 - 不一定是无错误的实现 - 因为我们从未发布过无错误的软件,没有人会这样做 - 但对于他们挣扎的游戏开发者而言,他们已经习惯了驱动程序中的错误,但所有这些不同的错误和不同的驱动程序是非常痛苦的。我们可以使这更加一致。

伯克: 另一种思考方式是:卫生一般都很好。例如,您可以查看4月6日发生的GPS翻转。它使一些飞机接地,因为它们无法应对翻滚的时钟。总有一些事情会在软件中发生,你希望能够更新,特别是像真正的低级东西一样 - 使用Conscript,这是我们的安全库,SSL库和TLS。这也是可以更新的。这是另一个领域,当证书到期,或者您的证书提供商突然停业时,您可以解决这个问题。

Ghuloum:或者,BoringSSL的错误。

伯克:或者,BoringSSL的错误,是的。它们在系统中是一种不合理但基本的组成部分。

Iliyan Malchev,Project Treble领导:几年前,Bionic (Android的标准C编程库)中有一个错误是由我们的合作伙伴引入的,他们的签名表错了。因此,交易功能随机失败,一系列曲线可能会破坏游戏。因此,在您发货之前,这样的东西难以捕捉。

Ghuloum:开发人员不得不在接下来的几年里继续使用它 - 除非它得到补丁。我已经看到了一些我们自己的第一方应用程序,[他们]必须解决整个生态系统中的错误。这只是意大利面条代码。

Ars:那么,是否有针对Beta Q用户的测试更新?

Ghuloum:是的 - 实际上,从Beta 2开始,我们开始推动更新。有  Reddit上的线程这一点。

Ars:对,好的。 

Ghuloum:他们的设备正在重启,是的,我们正在推动更新,测试更新,我们正在重新启动人们的设备。实际上,我们只是在Beta中这样做。在生产过程中,当Q发货时,所有重新启动都只是来自用户的有机重启。我们查看了数字,看起来好几个星期,这让我们达到了合理饱和度的人们进行更新。此外,我们每月都会进行安全更新,至少每月重启一次,无论如何。所以,你会接受它。我们不希望将UX置于用户面前。如果有更新等待,我们只是等待它们重新启动。

Ars:好的。你认为这是最终版本会是什么样的 - 一种不太明显的安静背景吗?

古鲁姆:是的。