如何在Gradle中为所有Library模块统一配置输出与发布规则?
解决方案
不需要重复编写代码,你可以通过以下步骤实现配置复用:
步骤1:创建通用配置脚本
在项目根目录的gradle文件夹下新建一个名为library-publishing.gradle的文件,将你原来的配置代码粘贴进去:
android.libraryVariants.configureEach { variant -> variant.outputs.configureEach { if (variant.buildType.name == "release") { outputFileName = "${project.name}-${project.versionName}.aar" } else { outputFileName = "${project.name}-${project.versionName}-${variant.buildType.name}.aar" } } } project.getGradle().getTaskGraph().whenReady { tasks.withType(GenerateMavenPom.class).tap { configureEach { destination = file("$buildDir/outputs/aar/${project.name}-${project.versionName}.pom") } } } afterEvaluate { publishing { publications { release(MavenPublication) { from components.release groupId = project.group artifactId = project.name version = project.versionName } } } }
步骤2:在根build.gradle中仅给Library模块应用该脚本
修改根目录的build.gradle文件,使用subprojects块过滤出Android Library模块,再应用上面的通用脚本:
subprojects { subproject -> // 判断当前子项目是否是Android Library模块 subproject.plugins.withId('com.android.library') { apply from: "${rootProject.projectDir}/gradle/library-publishing.gradle" } }
这样配置后,只有lib1、lib2这类应用了com.android.library插件的模块会加载通用配置,app模块(应用的是com.android.application插件)不会被影响,也就不会出现报错。
可选:添加脚本应用防护
如果你担心脚本被误应用到非Library项目,也可以在library-publishing.gradle开头加一层防护:
// 确保当前项目是Android Library if (!plugins.hasPlugin('com.android.library')) { throw new IllegalStateException("This script should only be applied to Android Library modules") } // 后面放原来的配置代码...
内容的提问来源于stack exchange,提问作者Yegie
相关产品推荐
相关产品推荐

