记录每天学习的新知识:Composing builds

一、啥是 Composing builds ??

https://docs.gradle.org/current/userguide/composite_builds.html

摘自 Gradle 文档:
复合构建只是包含其他构建的构建.
在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完整的 builds ,而不是包含单个 projects

  • 组合通常独立开发的构建,例如,在应用程序使用的库中尝试错误修复时
  • 将大型的多项目构建分解为更小,更孤立的块,可以根据需要独立或一起工作

使用这种方式的优点有:

  1. 支持单向跟踪
  2. 自动补全
  3. 依赖更新时,不会重新构建整个项目

二、使用

环境:
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. .gradle 是系统编译出来的;
  2. libs 啥也没,可以删
  3. Config 写依赖的位置
  4. VersionPlugin 实现插件接口
  5. .gitignore啥也没,可以删
  6. build.gradle 需要配置插件
  7. setting.gradle 空实现,Moudle需要此文件

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:https://blog.csdn.net/Json_Jerry/article/details/112860914

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风徐来辽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值