Gradle 插件获取所有依赖项,类似 androidDependencies?

诉求

打包过程中我想知道某个模块的信息,比如:

  • 模块androidx.work:work-runtime是否被依赖?
  • 模块androidx.work:work-runtime的版本号是多少?

我们利用 Android studio 已有的任务androidDependencies,双击执行很容易知道模块的信息,但是我想在 gradle 打包插件里面知道这个信息。根据模块是否存在指定某些操作;拿到模块的版本号判断是否执行某个操作,怎么办呢?

在这里插入图片描述

试探

**不满足需求:**使用这个输出的依赖只有一小部分,依赖不完全

    configurations.all {
        project.configurations.implementation.allDependencies.each { dep ->
            println("依赖项 implementation dependencies:" + dep.group + ":" + dep.name + ":" + dep.version)
        }
    }

在这里插入图片描述

满足需求: 全部依赖,获得的依赖和 androidDependencies 获取的一致

只是这个返回需要一定时间获取依赖项,并且要去重。

    /**
     * 加载所有依赖项
     *
     * @param project
     * @param callback
     */
    static void loadAddDependencies(Project project, DependenciesCallback callback) {
        def dp = new ArrayList()
        project.configurations.all {
            resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                String module = details.requested.module.group + ":" + details.requested.module.name + ":" + details.requested.version
                if (!dp.contains(module)) {
                    dp.add(module)
                }

                callback.onResult(dp)
            }
        }
    }


还有常用的方法:排除某个模块

    /**
     * 排除模块
     * @param project
     * @param excludeList
     */
    static void excludedDependencies(Project project, List<Pair> excludeList) {
        if (CommUtils.isEmptyOrNoExists(excludeList)) {
            return
        }

        project.configurations.all {
            resolutionStrategy {
                excludeList.each {
                    exclude group: it.first, module: it.second
                }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值