android gradle is插件,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
總結
以上是生活随笔為你收集整理的android gradle is插件,android gradle 插件创建 configuration的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android toast有焦点,and
- 下一篇: 无名飞控c语言源码,stm32飞控