[
读者评论
67条 ,有45名发帖人参与](arstechnica.com/gadgets/202…)
分享这个故事
-
安卓应用包的标志。
-
应用捆绑让Google Play服务器为每个用户定制一个应用。
-
一个中档手机用户得到了基本的APK、xhdpi图像资产、ARM v7代码和英语。
-
在这里,一个高端手机获得xxxhdpi资产桶、ARM64和高达三种语言。
-
在谷歌I/O 2018上,谷歌表示,由于更有针对性的语言、图像资产和架构,APK配置拆分平均提供20%的空间节省。
-
对于更具体的应用程序大小的节省,谷歌展示了这个图表。
谷歌I/O 2018
-
配置拆分只在安卓5.0 Lollipop及以上版本上工作。因此,对于较旧的设备,会生成完整的APK。
安卓的应用文件格式,即APK(Android PacKage),自2008年安卓推出以来一直伴随着我们。它是便携式的,易于创建,因为它只是一个结构化的.zip文件,并被各种工具广泛支持。Windows 11甚至要支持这种格式,作为其即将到来的Android兼容性的一部分。不过,谷歌不希望APKs再成为发布安卓应用的方式。谷歌的安卓开发者博客回顾了从8月开始,上传到Play Store的新应用将需要使用新的安卓应用包(AAB)格式来发布应用。这听起来只是个开始,谷歌说App Bundles “将取代APK作为标准发布格式”。
安卓应用包在2018年被引入安卓生态系统,我在安卓9的评论中写了一大段关于它们的内容。基本的推销方式是,安卓设备有大量不同的硬件和语言组合,应用程序必须支持这些硬件和语言组合,而将所有这些代码运送到每个单独的设备上是浪费空间的。安卓系统支持超过150种语言,四种不同的CPU架构(ARMv7、ARMv8、x86和x86_64),以及几个屏幕分辨率桶。将所有这些堆积在一个APK中是很常见的(尽管有时它们会被CPU架构分割开来),但这样做意味着每个设备都会得到大量的代码和资源,而这些代码和资源与它的CPU、地区和屏幕尺寸的特定组合无关。虽然这种存储空间的浪费在具有良好网络连接的高端手机上并不重要,但对于便宜的、存储空间有限的设备以及在难以获得高速网络的地方,这可能是一个大问题。
谷歌的解决方案是安卓应用包,它将安卓应用的分发从单一的、通用的APK变成了 “分割的APK “的集合,可以由谷歌应用商店为每台设备专门分配。顾名思义,这些 “分割的APK “并不是整个应用程序。它们是一个应用程序的部分,每个都针对一个特定的变化领域,结合起来形成最终的应用程序。有了App Bundles,如果你有一个高分辨率、ARMv8的设备,并通过App Bundles将区域设置为英文,那么Play Store将吐出一组只支持该设备类型的Split APK。如果你的朋友有一个低分辨率、ARM v7的手机,设置为英语和印地语,他们会得到另一套APK,完全支持这一点。Google Play可以为每个用户生成定制的APK,只给他们需要的代码,没有别的。谷歌表示,其结果是应用程序比通用APK小15%。
广告
使用App Bundles的开发者甚至可以将一个应用程序的_功能_模块化。这允许将这些功能只提供给支持这些功能的设备,或者这些功能不包括在初始下载中,只作为按需下载提供给用户。如果用户改变地区设置,同样的按需功能就会启动。
虽然应用程序捆绑系统更愿意发送花哨的、新的分割APK,但它不必这样做。由于它可以随心所欲地格式化应用程序,所以仍然可以生成一个向后兼容的单体APK。这使得该方法与所有安卓手机普遍兼容,无论你目前的设备多么被忽视。
应用程序捆绑与非谷歌游戏生态系统的对比
像许多新的安卓功能一样,从APK到安卓应用捆绑的变化导致了一个更复杂、更精密的功能集,用于推出应用。但它也让谷歌对安卓生态系统有了更多的控制。安卓应用捆绑包_需要_由应用商店的云计算机处理,才能发挥作用。虽然App Bundles是一种开源格式,而且谷歌有一个开源的“bundletool“应用程序可以编译它们,但其他一些公司将需要建立自己的基础设施,支付服务器费用以在云端托管它,并处理可怕的应用程序签名要求(后面会有更多内容)。
App Bundles是开源的,允许开发工具更容易支持它们。但是,一个替代性的应用商店将不得不承担如此多的工作和责任,以至于这种格式是否会成为Google Play应用包以外的东西值得怀疑。
APK的一个主要安全组成部分是应用签名。这是一个由应用开发者拥有的数字证书,证明其制作了该应用。应用签名在第一次安装时并不重要,但对于之后的每一点,签名都需要匹配。这意味着只有证书的所有者–原始应用开发者–才能更新该应用。没有任何随机的第三方可以制作一个名为 “Google-Pay.apk “的APK,覆盖真正的Google Pay应用并窃取你所有的银行信息。
进一步阅读
应用程序捆绑式地吐出APKs。这意味着整个应用程序构建系统必须托管在云端。这也意味着在云端托管每个单独的开发者应用签名密钥,有效地将应用的责任从开发者转移到谷歌。谷歌称此为 “Google Play应用签名”,该公司严肃地承诺,你仍然拥有该应用,并将仍然可以访问它。但这种安排感觉有点像把你的房契转让给第三方。
谷歌对Play商店的控制意味着它已经拥有了街道和车道,但现在它对你的应用有了更多的控制。如果Google Play的自动终结者机器人游走在你的开发者账户上,因为一些被认为是违规的行为,你会有更多的追索权。
广告
安卓应用捆绑系统将大量的权力和责任放在应用商店所有者的手中。如果应用商店的基础设施被破坏,第三方可以获得开发者密钥并开始推送恶意的更新。如果你不相信应用商店的所有者,那就太糟糕了。他们现在拥有签名密钥,如果他们愿意,可以在你不知情的情况下改变你的应用程序。政府也可以强迫应用程序商店所有者改变你的应用程序。就谷歌而言,该公司在存储安全方面可能比大多数应用开发者做得更好。但同样,很难想象任何非谷歌商店会采用这种做法。
谷歌已经做出了一些让步,以减轻对此的担忧。开发者可以保留他们上传到谷歌的签名密钥的本地副本,允许他们生成有效的更新,可以在谷歌游戏版本之上安装。开发者还可以从Google Play开发者控制台下载签名的 “分销APK”,这是老式的通用APK,可以上传到其他应用商店。如果你担心谷歌在未经你同意的情况下改变你的应用程序,谷歌表示,一个可选的新的“代码透明度“功能将让开发者验证下载的应用程序代码上的哈希值与他们上传的内容相符。
从8月起,应用程序捆绑将成为新应用程序的强制性规定。谷歌表示,就目前而言,”现有的应用程序目前被豁免 “于应用程序捆绑的要求。我们将把 “目前 “这个词的出现作为未来计划的一个重要指标。
对谷歌来说,安卓应用捆绑是个大问题。在2018年谷歌I/O大会上,该公司表示,如果每个应用都改用捆绑服务,谷歌_每天_将节省10PB的带宽,这是一个令人难以置信的数字,表明Play Store的运营规模。不过,对于我们这些不关心谷歌带宽账单的人来说,可能节省15%的空间真的值得颠覆整个APK生态系统,并将更多的权力转移到Play Store和谷歌的服务器吗?
上市图片由谷歌提供