https://docs.gradle.org/current/userguide/composite_builds.html
摘自 Gradle 文档:
复合构建只是包含其他构建的构建.
在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects
使用这种方式的优点有:
环境:
Android Studio Chipmunk | 2021.2.1 Patch 2
Build #AI-212.5712.43.2112.8815526, built on July 10, 2022
Runtime version: 11.0.12+7-b1504.28-7817840 amd64

简洁一下:
.gradle 是系统编译出来的; libs 啥也没,可以删 Config 写依赖的位置 VersionPlugin 实现插件接口 .gitignore啥也没,可以删 build.gradle 需要配置插件 setting.gradle 空实现,Moudle需要此文件
原gradle内的内容,全部删除
有两种写法,对应上面的语言,如果你使用的是
apply plugin: 'java-gradle-plugin'
buildscript {
repositories {
google()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
gradlePluginPortal()
mavenCentral()
}
}
repositories {
google()
maven { url 'https://jitpack.io' }
maven {url 'https://maven.aliyun.com/nexus/content/repositories/releases/'}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
}
dependencies {
implementation gradleApi()
}
gradlePlugin {
plugins {
version {
id = 'com.yoshin.versionplugin'
implementationClass = 'com.yoshin.versionplugin.VersionPlugin'
}
}
}
apply plugin: 'kotlin'
apply plugin: 'java-gradle-plugin'
buildscript {
repositories {
google()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
gradlePluginPortal()
mavenCentral()
}
dependencies {
// 因为使用的 Kotlin 需要需要添加 Kotlin 插件,需要和主工程对应,不然就出现两个版本了
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10"
}
}
repositories {
google()
maven { url 'https://jitpack.io' }
maven {url 'https://maven.aliyun.com/nexus/content/repositories/releases/'}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
}
dependencies {
implementation gradleApi()
implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10"
}
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
gradlePlugin {
plugins {
version {
// 在 app 模块需要通过 id 引用这个插件
id = 'com.yoshin.version'
// 实现这个插件的类的路径
implementationClass = 'com.yoshin.version.VersionPlugin'
}
}
}
空文件即可,啥也不用写
....
}
}
rootProject.name = "DemoComposingBuilds"
include ':app'
includeBuild('VersionPlugin')
添加:
includeBuild('VersionPlugin')
添加完这个,可以编译了。
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class VersionPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
}
}
public class Config {
public static String cardview = "androidx.cardview:cardview:1.0.0";
public static String material = "com.google.android.material:material:1.4.0";
}
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
//下面这行必须有,引用插件框架
id "com.yoshin.versionplugin"
}
//下面这行必须有,为了添加包下的类
import com.yoshin.versionplugin.*
android {
... 略
}
dependencies {
... 略
//下面这行是引用依赖
implementation Config.material
}
注意:第二步使用的是Kotlin的时候,出现了在工程中 引用 Config类 引用不到的场景,还没找到原因。硬写也好使。整明白再更。
详细记录上述问题:在使用Kotlin编写Plugin时发生,目前尚未解决
添加了代码: id “com.yoshin.versionplugin” 和 import com.yoshin.versionplugin.* 后可以编译通过,但是 import com.yoshin.versionplugin.Config 这个就引用不到了,报红。
但是, implementation Config.material 硬写也好用
注意,插件中的build.gradle文件中的 kotlin-gradle-plugin 版本要和主工程对应。
如插件中的build.gradle:
"org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10"
项目中:
plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
id 'org.jetbrains.kotlin.jvm' version '1.7.10' apply false
}
Android Studio统一依赖管理Composing builds:https://blog.csdn.net/Json_Jerry/article/details/112860914