获取 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 安装大小的主要内容,如果未能解决你的问题,请参考以下文章
安装包格式变成ABB、加速转向64位应用,OPPO或成最大受益者?