获取 APK / AAB 安装大小

Posted

技术标签:

【中文标题】获取 APK / AAB 安装大小【英文标题】:Get APK / AAB install size 【发布时间】:2022-01-12 08:28:17 【问题描述】:

使用apkanalyzer 可以从生成的 APK / AAB 中找出大量属性,例如文件大小、与另一个 APK 比较以获得文件大小增量等。

使用这个工具我创建了几个 Gradle 任务来:

获取特定的依赖项大小,并将它们相加以了解 SDK 的大小; 获取APK的下载大小,使用apkanalyzer; 使用 apkanalyzer 获取 APK 的比较文件大小,与空应用比较,以了解 SDK 大小;

现在,我真正需要的是找出 APK 的实际安装大小。意思是 APK 在设备上安装后占用的存储量。我发现apkanalyzer 没有为此提供解决方案,并且不知道如何解决这个问题。我不想手动执行此操作,而是必须自动化。最好通过 Gradle 任务。

那么:如何最好使用 Gradle 自动计算 APK 的安装大小?

【问题讨论】:

APK 的“安装大小”不确定。它至少会因操作系统版本而异,我不能排除它因设备型号而异(由于制造商的修补)。根据您对“APK 的安装大小”的定义,它也可能随时间而变化,因为 AOT 和类似的优化器会起作用。对于 AAB(如您的问题标题中所述),“安装大小”将因设备型号而异并通过用户设置,因为 AAB 会生成任意数量的 APK,代表要安装的应用程序。 这是有道理的。它不必非常精确。假设有一个参考模拟设备 Pixel 4,android 12 安装了 APK。我想通过 gradle task --> adb --> installed APK size 知道。同时我找到了这个解决方案android.stackexchange.com/questions/220442/…,但对我不起作用:line 23: [: 1: unary operator expected 您可以将该 shell 脚本翻译成 Groovy/Kotlin 以用于 Gradle 任务。请注意,它假定应用程序已安装——这是否满足您的需求?通常,当我想到 Gradle 任务时,它是用于应用安装之前的东西。 你是对的。但是,这是 CI 的一部分,我们想计算每个版本的 SDK 大小。最后的 gradle 任务是 1) 在参考设备上安装,在这种情况下是模拟设备,2) 确定安装大小,最后 3) 在我生成的报告中包含此信息。 【参考方案1】:

我已经制定了自己的答案。

    使用例如:echo no | avdmanager create avd -n <name> -k "system-images;android-30;google_apis;x86" -f 创建一个 AVD 运行 AVD:emulator -avd <name> 确保在 root 中运行 adbd:adb root。这对于检索包裹信息很重要。 在 AVD 上安装 APK:adb push <absolute_path_to_apk> 获取安装APK的代码路径:echo $(cut -d "=" -f2- <<< $(adb shell dumpsys package $packageName | grep codePath)) 使用第 5 步中的代码路径值从 APK 获取安装大小:adb shell du $codePath -h | awk 'FNR == 3' | head -n1 | awk 'print $1;' 这将返回一个字符串值,表示 APK 在参考设备上的安装大小(以 Mb 为单位)。

【讨论】:

以上是关于获取 APK / AAB 安装大小的主要内容,如果未能解决你的问题,请参考以下文章

生成后应用 apk 和 aab 文件仍然很大

aab文件和apk之间的转化

APK 版本未从 Play 商店更新已安装的 AAB 应用

安装包格式变成ABB、加速转向64位应用,OPPO或成最大受益者?

Android 安装包要从 APK 变成 AAB 格式了?事情可能并非你想的那样

上传 .aab 文件后,它没有显示基于移动架构的应用程序大小