首页 > 解决方案 > 如何在 Android Studio 中使用 gradle 任务获取依赖项大小?

问题描述

我需要创建一个在执行时显示每个依赖项大小的任务。

我已经寻找了一种方法来做到这一点,最接近的答案是这个但是,这个解决方案似乎只适用于非 Android 项目。

我目前正在使用tools.build:gradle:3.4.2android 5.1.1 的 gradle 插件

我想列出每个依赖项和大小,例如:

- Retrofit 2.5.0 ------ 654 KB.

- Butterknife 10.1.0 -- 150 KB.

我试图实现我之前链接的要点,但它总是说:

错误:解决后无法更改配置“:app:androidApis”的策略。

删除多个配置的一段代码后:

错误:解决后无法更改配置“:app:default”的策略。

在这一点上,我不知道在配置中放什么...

标签: androidandroid-gradle-pluginbuild.gradle

解决方案


您需要将此处提到的脚本放入其中project.afterEvaluate{},例如

project.afterEvaluate {
    tasks.create("depsize") {
        listConfigurationDependencies(configurations.default)
    }

    tasks.create("depsize-all-configurations") {
        configurations.each {
            if (it.isCanBeResolved()) {
                listConfigurationDependencies(it)
            }
        }
    }

}

def listConfigurationDependencies(Configuration configuration) {
    def formatStr = "%,10.2f"

    def size = configuration.collect { it.length() / (1024 * 1024) }.sum()

    def out = new StringBuffer()
    out << "\nConfiguration name: \"${configuration.name}\"\n"
    if (size) {
        out << 'Total dependencies size:'.padRight(65)
        out << "${String.format(formatStr, size)} Mb\n\n"

        configuration.sort { -it.length() }
                .each {
            out << "${it.name}".padRight(65)
            out << "${String.format(formatStr, (it.length() / 1024))} kb\n"
        }
    } else {
        out << 'No dependencies found';
    }
    println(out)
}

然后运行以下命令,您将获得打印的尺寸。

$ ./gradlew depsize

例如,我的输出如下:

Configuration name: "minApi16ReleaseRuntimeClasspath"
Total dependencies size:                                               2.90 Mb

appcompat-v7-26.1.0.aar                                              980.85 kb
support-compat-26.1.0.aar                                            621.42 kb
recyclerview-v7-26.1.0.aar                                           335.80 kb
support-media-compat-26.1.0.aar                                      304.53 kb
support-core-ui-26.1.0.aar                                           227.63 kb
support-fragment-26.1.0.aar                                          160.75 kb
constraint-layout-solver-1.0.2.jar                                    93.32 kb
support-core-utils-26.1.0.aar                                         85.11 kb
constraint-layout-1.0.2.aar                                           37.28 kb
animated-vector-drawable-26.1.0.aar                                   34.33 kb
support-vector-drawable-26.1.0.aar                                    30.74 kb
support-annotations-26.1.0.jar                                        24.13 kb
common-1.0.0.jar                                                      12.08 kb
common-1.0.0.jar                                                      10.89 kb
runtime-1.0.0.aar                                                      9.38 kb
support-v4-26.1.0.aar                                                  3.01 kb

见:https ://gist.github.com/medvedev/968119d7786966d9ed4442ae17aca279#gistcomment-3003945


推荐阅读