android gradle 插件创建 configuration

写了一个gradle 插件,现在的需求是需要通过 productFlavors 的类型来创建不同的configuration

目前代码:

private Project project
    private Configuration embedConf
    private Set<Configuration> embedConf2
    private Set<ResolvedArtifact> artifacts

    @Override
    void apply(Project project) {
        this.project = project
        checkAndroidPlugin()
        createConfiguration()
        project.afterEvaluate {
            resolveArtifacts()
            project.android.libraryVariants.all { variant ->
                processVariant(variant)
            }
        }
    }

    //检查插件
    private void checkAndroidPlugin() {
        if (!project.plugins.hasPlugin('com.android.library')) {
            throw new ProjectConfigurationException('fat-aar-plugin must be applied in project that' +
                    ' has android library plugin!', null)
        }
    }

    //创建标签插件
    private void createConfiguration() {
        def listener = new DependencyResolutionListener() {
            @Override
            void beforeResolve(ResolvableDependencies resolvableDependencies) {
                embedConf.dependencies.each { dependency ->
                    project.dependencies.add('provided', dependency)
                    //println 'fat-aar-->[dependency] ' + dependency.name
                }

                embedConf2.each { configuration ->
                    configuration.dependencies.each { dependency ->
                        project.dependencies.add('provided', dependency)
                        //println 'fat-aar-->[dependency] ' + dependency.name
                    }
                }
                project.gradle.removeListener(this)
            }

            @Override
            void afterResolve(ResolvableDependencies resolvableDependencies) {}
        }


        embedConf2 = new  HashSet<Configuration>()
        project.android.libraryVariants.all { BaseVariant variant ->
            variant.productFlavors.each { flavors ->
//                println 'fat-aar-->[flavors] ' + project.name
//                println 'fat-aar-->[flavors] ' + flavors.name.capitalize()
                def cname = flavors.getName() + 'Embed'
                if (project.configurations.findByName(cname) == null) {
                    def configg = project.configurations.create(cname.toString())
                    configg.visible = false
                    embedConf2.add(configg)
                    println 'fat-aar-->[configuration] ' + project.configurations.getByName(cname)
                }
            }
        }
        embedConf = project.configurations.create('embed')
        println 'fat-aar-->[configuration] ' + project.configurations.getByName('embed')
        embedConf.visible = false
        project.gradle.addListener(listener)
    }

现在遇到问题是 创建的 embed configuration 是可以正常使用,但是通过遍历productFlavors 的报错,看错误日志像是构建的顺序问题

错误日志:

➜ ./gradlew module-oldminirpc:assembleLazadaDebug
Parallel execution is an incubating feature.
fat-aar-->[configuration] configuration ':module-apdid:embed'
Incremental java compilation is an incubating feature.
fat-aar-->[configuration] configuration ':module-apdid:lazadaEmbed'
fat-aar-->[configuration] configuration ':module-apdid:aeEmbed'
fat-aar-->[embed detected][jar] com.alipay.stunsdk:stunclientsdk:1.0.2
fat-aar-->[configuration] configuration ':module-face:embed'
fat-aar-->[configuration] configuration ':module-logger:embed'
fat-aar-->[configuration] configuration ':module-oldminirpc:embed'

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/gnaixx/Documents/AntWork/Code/android-alipaysecuritysdk/module-oldminirpc/build.gradle' line: 41

* What went wrong:
A problem occurred evaluating project ':module-oldminirpc'.
> Could not find method aeEmbed() for arguments [com.alipay.apsecuritysdk.mrpc:mrpc-core:1.0.2:core] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.033 secs
阅读 4.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题