Android获取所有依赖库的几种方式

作者: FullStack | 来源:发表于2018-07-12 14:14 被阅读362次

    当项目越来越大的时候,依赖的库也越来越多,再加上aar的传递依赖,导致dependency的急速膨胀。我们可以通过如下几种方式,查看项目依赖的所有库(包含直接依赖和间接依赖)。

    方式一:通过dependencies命令

    ./gradlew :app:dependencies
    该task会显示如下所示的输出:

    B0F07DBA-C9B4-43D5-889B-ADCCA9C85FB7.png

    输出列表展示了所有configuration下的依赖树,依赖关系明显,层次清晰。如果觉得输出的结果太冗长(通常情况下包含几十个configuration),可以通过指定configuration来显示特定的依赖树:
    ./gradlew :app:dependencies --configuration releaseCompileClasspath
    该命令只会显示release模式下编译过程中的依赖树。

    方式二: 通过androidDependencies命令

    ./gradlew :app:androidDependencies
    输出结果如下:

    Xnip2018-07-11_19-06-51.jpg

    如图所示,该task会平铺展示依赖树,并且只展示几个主要的variant,看起来较为清爽,但是缺点是不能像方式一那样指定configuration。

    方式三:自定义task获取

    project.afterEvaluate {
        project.android.applicationVariants.all { variant ->
            tasks.create(name: "showDependencies${variant.name.capitalize()}",
                    description: "展示所有依赖") {
                doLast {
                    Configuration configuration
                    try {
                        // 3.x
                        configuration = project.configurations."${variant.name}CompileClasspath"
                    } catch (Exception e) {
                        // 2.x
                        configuration = project.configurations."_${variant.name}Compile"
                    }
                    configuration.resolvedConfiguration.lenientConfiguration.allModuleDependencies.each {
                        def identifier = it.module.id
                        println("${identifier.group}:${identifier.name}:${identifier.version}")
                    }
                }
            }
        }
    }
    

    如上,通过这种自定义task的方式,可以选择打印依赖,也可以选择保存到文件中,灵活度最高。

    总结:
    方式一:通用task,按层次展示依赖树,可以通过指定configuration来过滤输出。
    方式二:android项目特有的task,平铺展示依赖树,不能过滤输出结果。
    方式三:自定义task获取依赖,灵活度最高,但是需要对gradle有较深的理解。

    相关文章

      网友评论

      • cfced65b253f:你好!我们是程序员大咖旗下专注于程序员生态的公众号程序员大咖(微信号 CodePush)。我们很赞赏你的文章,希望能获得转载授权。授权后,你的文章将会在公众号程序员大咖、程序员共读、源码共读、Java编程精选、iOS开发等渠道发布。我们会注明来源和作者姓名。
        非常感谢~~~
        cfced65b253f:@FullStack 好的谢谢
        FullStack:@程序员大咖 ok
      • 谭冉冉:写的非常好,感谢楼主分享

      本文标题:Android获取所有依赖库的几种方式

      本文链接:https://www.haomeiwen.com/subject/vtfkpftx.html