写了一个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