【问题标题】:Get APK / AAB install size获取 APK / AAB 安装大小
【发布时间】:2023-04-11 11:20:01
【问题描述】:

使用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) 在我生成的报告中包含此信息。

标签: android gradle


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多