为什么App Bundle的权重比.apk文件大?

时间:2018-11-16 12:40:28

标签: android android-app-bundle

当我使用旧的.apk时,安装后我的应用程序的重量为12mb。 我想使用Android App Bundle进行切换,所以我:

  1. 已使用

      

    gradlew捆绑包

获取.aab文件(重量:15mb-进行比较。apk为16 mb)

  1. 已使用

      

    bundletool构建应用程序   产生了重量为80mb的.apks文件!

  2. 已使用

      

    bundletool install-apks

并安装在我的手机上,但干净安装重25mb! 因此,安装后的重量不会小于上一个〜16mb ,而是会更加显着。

我在Moto G5和Android Oreo(可绘制的图像为xxhdpi)上进行了测试

我做错什么了吗?也许是来自bundletool的错误?

编辑: 在步骤2中使用标志--connected-device时。生成的.apks较小,但最后(步骤3),我的应用程序的最终存储仍然为25 / 26mb:(

3 个答案:

答案 0 :(得分:1)

Android报告的大小是您的应用程序在设备上占用的大小:由于平台会优化dex文件,因此它在设备上占用的大小可能比您在计算机上看到的文件的实际大小大得多。

Play Console报告的大小是下载大小,由于它会被进一步压缩,因此通常小于您在计算机上看到的文件

答案 1 :(得分:1)

Google Play 的新应用服务模型称为 Dynamic Delivery,然后使用您的app bundle为每个用户的设备配置生成和提供优化的APK,因此他们只下载运行您的应用程序所需的代码和资源。您不再需要构建、签署和管理多个 APK 来支持不同的设备,并且用户可以获得更小、更优化的下载。

据我所知,AAB 可能更大,但是当手机安装应用程序时,Google Play 会为该特定设备生成 APK,会更小

例如:

我的 ABB 文件是 30MB。

当我通过 Google Play 安装我的应用时,我手机上的文件大小只有 10MB。

答案 2 :(得分:0)

我从https://developer.android.com/guide/app-bundle/所了解的

  

捆绑包是一种新的上传格式,其中包含您所有已编译应用程序   代码和资源

     

Google Play的动态投放使用您的Android应用程序捆绑包进行构建   并投放针对每种设备配置进行了优化的APK。这个   通过删除未使用的应用程序,最终用户可以下载较小的应用程序   其他设备所需的代码和资源。

因此,基本上,apk将使用动态交付构建,该交付将仅组合必要的资源,并确保优化安装在特定设计上的构建。没有提到捆绑包的大小较小,但是可以确保最终用户的下载大小较小。

但是我们为什么要考虑使用Android应用程序捆绑包?

首先,该方法为您的代码库提供了一个干净且分离的结构。由于捆绑软件的工作方式(尤其是动态交付,我们将在后面介绍),因此按功能进行模块化将成为您应用程序的一部分。这类似于Instant应用程序中的模块化方法或通用的按功能模块化的方法。无论如何,这有助于使应用程序的不同部分分离,并有助于使您的代码库更易于使用。

以前可能需要我们构建多个APK来针对不同的API版本,设备类型等等-Android App Bundles意味着我们现在可以仅使用我们所有的应用程序资源上传单个工件,并且该工具将照顾需要构建并交付给我们用户的内容。这从根本上为我们实现了这一过程的自动化,这意味着我们可以将重点转移到开发过程的其他部分。

由于该应用程序捆绑包将构建针对特定设备及其配置的APK,因此这意味着交付的APK通常较小。这实际上取决于您的应用程序,因为主要的节省将来自于密度/区域特定的资源和任何其他未使用的代码。 App Bundle的早期采用者在这些节省的大小中显示了一些很好的效果:

Famous Apps

应用程序捆绑包向我们介绍了称为动态交付的新概念。这使我们的应用程序可以向用户提供新功能,并允许它们在运行时作为我们应用程序的扩展进行下载和安装。这样一来,我们可以减小应用程序的初始大小,并将这些额外功能仅提供给可能会真正使用它们的用户。

很快,应用程序捆绑包格式将支持捆绑包上的即时启用。-这意味着用户将能够立即启动我们的功能模块,而无需安装我们的应用程序,类似于即时应用程序当前的工作方式。