当前位置:   article > 正文

Android Studio使用Composing builds统一依赖管理_org.jetbrains.kotlin.android

org.jetbrains.kotlin.android

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 如下:

  1. apply plugin: 'java-gradle-plugin'
  2. buildscript {
  3. repositories {
  4. google()
  5. maven { url 'https://jitpack.io' }
  6. maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  7. maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  8. gradlePluginPortal()
  9. mavenCentral()
  10. }
  11. }
  12. repositories {
  13. google()
  14. maven { url 'https://jitpack.io' }
  15. maven {url 'https://maven.aliyun.com/nexus/content/repositories/releases/'}
  16. maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  17. maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  18. mavenCentral()
  19. }
  20. dependencies {
  21. implementation gradleApi()
  22. }
  23. gradlePlugin {
  24. plugins {
  25. version {
  26. id = 'com.yoshin.versionplugin'
  27. implementationClass = 'com.yoshin.versionplugin.VersionPlugin'
  28. }
  29. }
  30. }

Kotlin,配置 build.gradle 如下:

  1. apply plugin: 'kotlin'
  2. apply plugin: 'java-gradle-plugin'
  3. buildscript {
  4. repositories {
  5. google()
  6. maven { url 'https://jitpack.io' }
  7. maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  8. maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  9. gradlePluginPortal()
  10. mavenCentral()
  11. }
  12. dependencies {
  13. // 因为使用的 Kotlin 需要需要添加 Kotlin 插件,需要和主工程对应,不然就出现两个版本了
  14. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10"
  15. }
  16. }
  17. repositories {
  18. google()
  19. maven { url 'https://jitpack.io' }
  20. maven {url 'https://maven.aliyun.com/nexus/content/repositories/releases/'}
  21. maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  22. maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  23. mavenCentral()
  24. }
  25. dependencies {
  26. implementation gradleApi()
  27. implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10"
  28. }
  29. compileKotlin {
  30. kotlinOptions {
  31. jvmTarget = "1.8"
  32. }
  33. }
  34. compileTestKotlin {
  35. kotlinOptions {
  36. jvmTarget = "1.8"
  37. }
  38. }
  39. gradlePlugin {
  40. plugins {
  41. version {
  42. // 在 app 模块需要通过 id 引用这个插件
  43. id = 'com.yoshin.version'
  44. // 实现这个插件的类的路径
  45. implementationClass = 'com.yoshin.version.VersionPlugin'
  46. }
  47. }
  48. }

3、需要在Moudle下添加setting.gradle文件
空文件即可,啥也不用写

4、修改项目的setting.gradle文件

  1. ....
  2. }
  3. }
  4. rootProject.name = "DemoComposingBuilds"
  5. include ':app'
  6. includeBuild('VersionPlugin')

添加:

includeBuild('VersionPlugin')

添加完这个,可以编译了。

5、实现VersionPlugin

  1. import org.gradle.api.Plugin;
  2. import org.gradle.api.Project;
  3. public class VersionPlugin implements Plugin<Project> {
  4. @Override
  5. public void apply(Project project) {
  6. }
  7. }


6、配置项目依赖和版本号 ==

  1. public class Config {
  2. public static String cardview = "androidx.cardview:cardview:1.0.0";
  3. public static String material = "com.google.android.material:material:1.4.0";
  4. }


7、使用插件引用依赖

  1. plugins {
  2. id 'com.android.application'
  3. id 'org.jetbrains.kotlin.android'
  4. //下面这行必须有,引用插件框架
  5. id "com.yoshin.versionplugin"
  6. }
  7. //下面这行必须有,为了添加包下的类
  8. import com.yoshin.versionplugin.*
  9. android {
  10. ... 略
  11. }
  12. dependencies {
  13. ... 略
  14. //下面这行是引用依赖
  15. implementation Config.material
  16. }

注意:第二步使用的是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"

项目中:

  1. plugins {
  2. id 'com.android.application' version '7.2.2' apply false
  3. id 'com.android.library' version '7.2.2' apply false
  4. id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
  5. id 'org.jetbrains.kotlin.jvm' version '1.7.10' apply false
  6. }

参考地址

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

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


android 通过buildSrc统一管理依赖

  • 在项目的根目录下新建一个目录buildSrc,然后重新构建,这时候android studio会在该目录下自动生成文件。

  • 这里我们用的是kotlin,需要在buildSrc目录下创建一个kotlin脚本build.gradle.kts

    1. import org.gradle.kotlin.dsl.`kotlin-dsl`
    2. repositories {
    3. jcenter()
    4. }
    5. plugins {
    6. `kotlin-dsl`
    7. }
  • buildSrc目录下创建src/main/java目录,然后创建包名,在包下面创建一个Dependencies.kt

    1. object Libs{
    2. const val androidGradlePlugin="com.android.tools.build:gradle:4.1.2"
    3. }
  • 在build.gradle中使用

    1. buildscript {
    2. ext.kotlin_version = "1.4.21"
    3. repositories {
    4. google()
    5. jcenter()
    6. }
    7. dependencies {
    8. // classpath "com.android.tools.build:gradle:4.1.2"
    9. classpath Libs.androidGradlePlugin
    10. classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    11. // NOTE: Do not place your application dependencies here; they belong
    12. // in the individual module build.gradle files
    13. }
    14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/223425
推荐阅读
相关标签
  

闽ICP备14008679号