Composing builds

一、啥是 Composing builds ??

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> {@Overridepublic 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 falseid 'com.android.library' version '7.2.2' apply falseid 'org.jetbrains.kotlin.android' version '1.7.10' apply falseid 'org.jetbrains.kotlin.jvm' version '1.7.10' apply false
}

参考地址

Android Studio统一依赖管理Composing builds_Jay丶Xu的博客-CSDN博客

再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度 - 掘金


android 通过buildSrc统一管理依赖

  • 在项目的根目录下新建一个目录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.androidGradlePluginclasspath "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}
    }

Android Studio使用Composing builds统一依赖管理相关推荐

  1. 统一依赖管理Composing builds

    背景 在我们的AS项目中,经常引用多个Module,多人参与项目开发,这种背景下,我们会时常遇到版本冲突问题,出现不同的compileSdkVersion等,导致我们的包体变大,项目运行时间变长,所以 ...

  2. AndroidStudio使用进阶二:搭建自己的maven私服,并使用Gradle统一依赖管理

    前言: 最近我们老大组织了我们软件团队开了一个小会,说了一些存在的问题,平时在技术上的交流还是比较少的,尤其是在不同的项目之间的开发人员,然而经过这次会议我突然发现,我的缺陷不仅是在基础的能力上,还有 ...

  3. android添加工程依赖工程,Android Studio为项目加上模块依赖的图文方法

    一些用户们在使用Android Studio的时候,不是很熟悉其中是怎么为项目加上模块依赖?今日这篇文章就带来了Android Studio为项目加上模块依赖的图文方法. Android Studio ...

  4. Android Studio统一依赖管理Composing builds

    glideVersion : "4.11.0", okhttpVersion : "3.11.0", retrofitVersion : "2.3.0 ...

  5. Android Studio统一依赖管理Composing builds,2021最新网易Android面经

    支持Android Studio的代码补全,以下演示示例图来自于网络 使用方式可参考:Kotlin + buildSrc for Better Gradle Dependency Management ...

  6. Android Studio 更换国内源下载依赖库

    我的博客:http://daycoding.com 小小程序猿 由于国内GFW的原因,经常导致android studio 莫名其妙的编译不了,多数原因是由于不能下载依赖库 Gradle支持三种不同的 ...

  7. Android开发之Android Studio第三方库的六种依赖讲解说明

    在Android Studio中有六种依赖 Compile,Provided,APK,Test compile,Debug compile,Release compile 1.Compile 是对所有 ...

  8. Android Studio中使用Git进行代码管理(分支、合并)

    打开Android Studio选择,选择从Git检出代码 也可以从VCS如下点击 去远程仓库复制地址,这里以码云Gitee第三方代码托管为例,类似Github的界面,点击右边复制项目地址 填一下配置 ...

  9. android studio主moudle无法调用依赖moudle里的jar包

        关于这个问题,首先3.0以前gradle中使用的是compile来引入依赖,升级到3.0后studio会自动提示Configuration 'compile' is obsolete and ...

最新文章

  1. 独家 | 数据分析@爱可可-爱生活是否在用机器学习算法运营微博
  2. 建站四部曲之前端显示篇(React+上线)
  3. 科大星云诗社动态20220107
  4. php mysql 非空_MySQL非空约束(NOT NULL)
  5. TCP服务器端和客户端建立连接 - 客户端的回调处理
  6. WCF basicHttpBinding之Message Security Mode
  7. DOM操作案例之--全选与反选
  8. 卡内基梅隆大学和斯坦福计算机,卡内基梅隆大学并列全美榜首的专业--计算机专业...
  9. linux查看r的安装路径,在Linux CentOS 6.5版上安装R3.1.1的问题(检查LDFLAGS以获取Fortran库的路径)...
  10. linux内核的外部接口函数,linux内核中GPIO的使用(二)--标准接口函数
  11. 算法笔记--二分图判定
  12. 谈卢梭的《爱弥尔》及其对于教育的现实意义
  13. 9.Jenkins 权威指南 --- Jenkins 维护
  14. python数学实验与建模司守奎pdf_数学建模算法与程序司守奎.pdf
  15. Linux内核开发-入门篇
  16. rapidminer java_在Java应用程序RapidMiner的整合(Integration of RapidMiner i
  17. JavaScript 游戏开发:手把手实现碰撞物理引擎
  18. 品牌,来1TB反向传播?
  19. 华为鸿蒙OS精品资料汇总,持续更新中
  20. antd输入框禁止回车

热门文章

  1. 【FFT】快速傅里叶变换详解
  2. 径向基网络(RBF network)之BP监督训练
  3. 如何设计一个权限管理模块?
  4. 微信小程序抓包教程:Burpsuite版 附所需工具
  5. 一名大学毕业生的反思_反思我大学毕业时的软件工程师的第一年
  6. JavaWeb,使用servlet/jsp时页面跳转的两种方式:转发和重定向
  7. linux 防火墙 功能点,功能点(Funciton Point FP)估算法(三) 调整因子
  8. ORA-02002error while writing to audit trail 问题处理
  9. Azure学习笔记2.——六种虚拟网络连接
  10. 由旋转矩阵求旋转中心