EmuLabZip logo EmuLabZip

构建大小

最后更新 · 在 GitHub 上编辑此页

Build size 视图比较两个构建:按类型和按文件显示增长了什么

emulabzip size 会拆解 APK、AAB 或 IPA,并说明字节都在哪里;emulabzip size diff 会说明两个构建之间发生了什么变化;emulabzip.toml 中的大小预算会在构建增长过多时让 CI 失败。它读取这台电脑上的文件:不需要设备,不需要 SDK 工具,也不需要 Xcode。

emulabzip size show app-release.apk
emulabzip size show app-release.aab --json
emulabzip size diff app-1.4.apk app-1.5.apk
emulabzip size diff app-1.4.apk app-1.5.apk --fail-on-growth 5      # exit 1 over 5% growth
emulabzip size show app-release.apk --budget --baseline app-1.4.apk # hold it to [size] in emulabzip.toml

你能得到什么#

  • 下载大小(压缩后,即文件中存储的大小)和安装后大小,按类型划分:dex(编译后的代码)、native(lib/<abi>/*.so,在 iOS 上还有可执行文件和 Frameworks/)、resources、assets、manifest、signing 和 other。
  • 按 ABI 划分的原生代码(arm64-v8a、x86_64……),因此打包了四种 ABI 的构建一目了然。在 IPA 上则是 Frameworks 和可执行文件。
  • 每个 dex 文件及其类和方法,从文件头读取,并与单个 dex 文件所能容纳的 65,536 个方法对比总数。
  • AAB 的模块(base 以及功能模块)。
  • 最大的文件。
  • 使用 diff 时:总量和百分比,按类型和按文件夹划分的变化,以及新增、删除和变更的最大文件。

判断一个文件是 APK、AAB 还是 IPA,依据的是其内部内容,而不是文件名。

预算#

[size]
max_total_mb = 25          # the download size, compressed
max_dex_mb = 8
max_native_mb = 12
max_resources_mb = 6
max_methods = 60000        # all dex files together
max_growth_percent = 5     # against a baseline build (--baseline, or ci --size-baseline)

大小以压缩后大小的兆字节(1,048,576 字节)计。每个键都是可选的,未知的键会报错,而没有基线构建的增长限制会被报告,而不是视为通过。在 CI 中:

emulabzip ci -o run.ezsession --size app-release.apk --size-baseline last-release.apk -- ./gradlew connectedCheck

构建会在任何内容运行之前被读取,因此文件缺失不会浪费一次测试运行。参见预算。

在桌面端#

Build size 视图通过文件对话框打开一个构建(不需要设备),显示按类型划分的条形图、原生代码、dex 文件和最大的文件,并可通过 Compare with… 与第二个构建比较。

限制#

  • 它不会打开编译后的 manifest 或 dex 字节码:只读取大小、文件夹和 dex 文件头。如需类级别的细分,请使用 Android Studio 的 APK Analyzer。
  • 它目前还不能从设备读取已安装的应用:请先拉取文件(adb shell pm path、adb pull)。
  • 通过 MCP(analyze_package、diff_packages),只接受扩展名为 .apk、.aab 或 .ipa 的文件。