自定义插件从Android Studio中添加依赖beforeResolve [英] Custom plugin adding dependency beforeResolve from Android Studio

查看:1156
本文介绍了自定义插件从Android Studio中添加依赖beforeResolve的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用以下code定制的摇篮插件:

  project.getGradle()的addListener(新DependencyResolutionListener(){
    @覆盖
    无效beforeResolve(ResolvableDependencies resolvableDependencies){
        depsToAdd.each {DEP - >
            compileConfig.getDependencies()
                。新增(project.getDependencies()
                .create(DEP)
        }    }    @覆盖
    无效afterResolve(ResolvableDependencies resolvableDependencies){    }
})

这似乎是工作在命令行罚款。不过,如果我的gradle刷新从Android的工作室,它 barfs无法更改配置:应用程序:编译解决后

我的猜测是有某种缓存正在进行或Studio建立更多的变种(我只是运行的组合从我的命令行想要的变体,它每一次的作品)。

有谁知道可能什么,以及如何最好地解决此问题?


解决方案

我设法想出解决办法。的方式做到这一点是添加 DependencyResolutionListener 在其中添加依赖关系,然后删除侦听器,因此它不会试图将其添加在以后的解决步骤。

  compileDeps = project.getConfigurations()。GetByName方法(编译)。getDependencies()
project.getGradle()。的addListener(新DependencyResolutionListener(){
    @覆盖
    无效beforeResolve(ResolvableDependencies resolvableDependencies){
        compileDeps.add(project.getDependencies()创建(org.foo:bar:$version))
        project.getGradle()的removeListener(本)
    }    @覆盖
    无效afterResolve(ResolvableDependencies resolvableDependencies){}
})

我在这里使用此

I have a custom Gradle plugin that uses the following code:

project.getGradle().addListener(new DependencyResolutionListener() {
    @Override
    void beforeResolve(ResolvableDependencies resolvableDependencies) {
        depsToAdd.each { dep ->
            compileConfig.getDependencies()
                .add(project.getDependencies()
                .create(dep)
        }

    }

    @Override
    void afterResolve(ResolvableDependencies resolvableDependencies) {

    }
})

This seems to work fine from command line. However, if I refresh gradle from Android Studio, it barfs with Cannot change configuration :app:compile after it has been resolved

My guess is there is some sort of caching going on or Studio builds more variants (I just run the assemble for the variant I want from command line which works every time).

Does anyone know what might be going on and how best to resolve this?

解决方案

I managed to figure this out. The way do this is to add a DependencyResolutionListener in which you add the dependencies and then remove the listener so it doesn't try to add them on later resolution steps.

compileDeps = project.getConfigurations().getByName("compile").getDependencies()
project.getGradle().addListener(new DependencyResolutionListener() {
    @Override
    void beforeResolve(ResolvableDependencies resolvableDependencies) {
        compileDeps.add(project.getDependencies().create("org.foo:bar:$version"))
        project.getGradle().removeListener(this)
    }

    @Override
    void afterResolve(ResolvableDependencies resolvableDependencies) {}
})

I have a working example of a plugin that uses this here

这篇关于自定义插件从Android Studio中添加依赖beforeResolve的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆