You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Gradle任务自动化计算APK/AAB的实际安装大小

方案1:无需连接设备的安装大小预估(CI友好)

可以直接使用Android SDK内置的aapt2工具(build-tools 30.0.0及以上版本自带)实现无设备的安装大小计算,该工具给出的是官方标准预估值,和实际安装差值极小。
对应的Gradle任务示例如下:

import com.android.build.gradle.BaseExtension
import java.io.ByteArrayOutputStream

tasks.register("getApkInstallSize") {
    dependsOn("assembleRelease") // 依赖打包任务,按需修改变体名
    val android = project.extensions.getByType(BaseExtension::class.java)
    val aapt2Path = File(android.sdkDirectory, "build-tools/${android.buildToolsVersion}/aapt2").absolutePath
    val apkPath = File(project.buildDir, "outputs/apk/release/app-release.apk").absolutePath // 按需修改APK路径

    doLast {
        val outputStream = ByteArrayOutputStream()
        exec {
            commandLine(aapt2Path, "get-size", "total", apkPath)
            standardOutput = outputStream
        }
        val installSizeBytes = outputStream.toString().trim().toLong()
        val installSizeMb = "%.2f".format(installSizeBytes / 1024 / 1024.0)
        println("APK预估安装大小:${installSizeMb}MB (${installSizeBytes}字节)")
        // 可自行将结果写入文件、上报到监控平台等
    }
}

如果需要区分不同存储分区的大小,把命令里的total换成user/system即可。


方案2:连接真实设备的实测安装大小

如果需要获取设备上的真实安装大小,可以通过Gradle调用adb命令完成自动安装、查询、卸载的全流程,适合有测试机挂载的场景:

import java.io.ByteArrayOutputStream

tasks.register("getRealApkInstallSize") {
    dependsOn("assembleRelease")
    val apkPath = File(project.buildDir, "outputs/apk/release/app-release.apk").absolutePath
    val packageName = "com.your.packagename" // 替换为你的应用包名

    doLast {
        // 安装APK
        exec { commandLine("adb", "install", "-r", apkPath) }
        // 查询安装大小
        val outputStream = ByteArrayOutputStream()
        exec {
            commandLine("adb", "shell", "pm", "get-installed-size", packageName)
            standardOutput = outputStream
        }
        val sizeMatch = Regex("total=(\\d+)").find(outputStream.toString().trim())
        val installSizeBytes = sizeMatch?.groupValues?.get(1)?.toLong() ?: 0L
        val installSizeMb = "%.2f".format(installSizeBytes / 1024 / 1024.0)
        println("APK真实安装大小:${installSizeMb}MB (${installSizeBytes}字节)")
        // 卸载APK
        exec { commandLine("adb", "uninstall", packageName) }
    }
}

注意事项

  • 如果你的项目使用AGP 7.0+,可以直接通过AGP提供的API直接获取构建产物路径,不需要硬写APK路径,适配性更强。
  • 两个方案都可以直接和你现有基于apkanalyzer的体积统计任务整合,统一输出体积报表。

内容的提问来源于stack exchange,提问作者Marvin Effing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:36:01