Android Studio:构建 APK 与 运行 APK 之间的大小差异

Android Studio: Difference in size between Build APK vs Run APK

我注意到使用这 2 个选项生成的 apk 的大小不同。

为什么会这样?

使用 构建 -> 构建 APK 选项:

MyProject\app\build\outputs\apk\app-debug.apk(大小 2.997 KB)

使用 运行 应用程序 选项:

MyProject\app\build\outputs\apk\app-debug.apk(大小 3.300 KB)

谢谢。

如果以 issue 的身份发给 Android Studio 团队,这个问题可能会得到更好的回答。我的猜测是您在 Android Studio (AS) 中使用 Instant Run。这可以解释更大的大小,因为 Instant 运行 为更改的代码生成代理 类。

编辑 Run 配置以使用 gradle build 构建,您应该能够删除额外的代码...但这会带来更长的 build/deploy 时间.. . 如果调试版本的大小对你来说真的很重要,那么没关系,但对于大多数人来说,这会破坏 Android 团队最近为提高速度

对 DSL 所做的所有改进

Build APK 是 运行 :app:assembleDebug Gradle 任务的快捷方式(假设您在 Build Variants 中启用了调试变体window).

当运行应用程序时,我们首先询问您要定位哪个设备,然后将信息传递给Gradle。除此之外,这让我们可以过滤掉不必要的资源。如果您启用了 Instant 运行,我们还会将其他代码打包到 APK 中。

我的即时 运行 已关闭。

我使用 Run->Run 'App' 获得 6MB APK 大小,使用 Build->Build APK 选项获得 11MB 签名和未签名的 APK。 Build->Generate Signed APK... 选项还为我的应用提供了 11MB 的 APK。

我认为 Android Studio 放弃一些资源来加快构建速度。

11MB 大小的 APK 有更多的资源,所以上传到 play-store 会是更好的选择。

我使用 Build->Analyze Apk... 分析了这两个 APK,因此我发现 5.7mb 的资源差异是由 v4 和 v17 库中的一些额外绘图引起的。

当您通过构建->构建 APK 创建构建时,apk 将包含所有设备的所有资源。 即对于 ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi。

但如果您是 运行 device/emulator 上的应用程序,它会检测到 phone 的分辨率,并且只会将具有该分辨率的资源添加到.apk 文件。例如,如果您的设备是 xhdpi ,它将放弃所有其他屏幕分辨率并且只包含 xhdpi 资源。