赞
踩
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
插件Moudle全部代码结构如下:
简单介绍下:
1、 于项目中新建 Moudle,取名 VersionPlugin
2、重写 VersionPlugin 的 build.gradle (区分Moudle语言)
3、需要在Moudle下添加setting.gradle文件
4、修改项目的setting.gradle文件
5、实现VersionPlugin
6、配置项目依赖和版本号 ==
7、使用插件引用依赖
1、 于项目中新建 Moudle,取名 VersionPlugin
2、重写 VersionPlugin 的 build.gradle (区分Moudle语言)
原gradle内的内容,全部删除
有两种写法,对应上面的语言,如果你使用的是
Java ,配置 build.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'
- }
- }
- }
-
Kotlin,配置 build.gradle 如下:
- 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'
- }
- }
- }
3、需要在Moudle下添加setting.gradle文件
空文件即可,啥也不用写
4、修改项目的setting.gradle文件
- ....
-
- }
- }
- rootProject.name = "DemoComposingBuilds"
- include ':app'
- includeBuild('VersionPlugin')
添加:
includeBuild('VersionPlugin')
添加完这个,可以编译了。
5、实现VersionPlugin
- import org.gradle.api.Plugin;
- import org.gradle.api.Project;
-
- public class VersionPlugin implements Plugin<Project> {
-
- @Override
- public void apply(Project project) {
-
- }
- }
6、配置项目依赖和版本号 ==
- 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";
-
- }
7、使用插件引用依赖
- 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类 引用不到的场景,还没找到原因。硬写也好使。整明白再更。
1、引用不到类
详细记录上述问题:在使用Kotlin编写Plugin时发生,目前尚未解决
添加了代码: id “com.yoshin.versionplugin” 和 import com.yoshin.versionplugin.* 后可以编译通过,但是 import com.yoshin.versionplugin.Config 这个就引用不到了,报红。
但是, implementation Config.material 硬写也好用
2、kotlin-gradle-plugin 插件冲突
注意,插件中的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_Jay丶Xu的博客-CSDN博客
再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度 - 掘金
在项目的根目录下新建一个目录buildSrc,然后重新构建,这时候android studio会在该目录下自动生成文件。
这里我们用的是kotlin,需要在buildSrc目录下创建一个kotlin脚本build.gradle.kts
- import org.gradle.kotlin.dsl.`kotlin-dsl`
-
- repositories {
- jcenter()
- }
-
- plugins {
- `kotlin-dsl`
- }
在buildSrc目录下创建src/main/java目录,然后创建包名,在包下面创建一个Dependencies.kt
- object Libs{
-
- const val androidGradlePlugin="com.android.tools.build:gradle:4.1.2"
-
- }
-
在build.gradle中使用
- buildscript {
- ext.kotlin_version = "1.4.21"
- repositories {
- google()
- jcenter()
- }
- dependencies {
- // classpath "com.android.tools.build:gradle:4.1.2"
- classpath Libs.androidGradlePlugin
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。