galaxybruce.github.io

参考文章:

  1. Gradle依赖项学习总结,dependencies、transitive、force、exclude的使用与依赖冲突解决
  2. Android gradle 统一依赖库版本
  3. 作为Android开发你必须明白的Gradle基础

查看依赖关系

项目根目录,输入命令: ./gradlew :module名称:dependencies –configuration api

或者进入module目录,输入命令: ./gradlew dependencies –configuration api

–configuration是查看具体的哪种依赖,比如api implementation compileOnly等。

四个符号,它们的目的仅用于格式化:

  1. +- - - 是依赖分支库的开始。
  2. | 标识还是在之前的依赖库中的依赖,显示它依赖的库。
  3. \- - - 是依赖库的末尾。
  4. 星号(*) 在依赖库的末尾,意味着该库的进一步依赖关系不会显示,因为它们已经列在其他某个子依赖树中。

指明依赖某个版本号

在各个moudle中的build.gradle文件配置需要统一的依赖库版本号

configurations.all() {
    Configuration configuration ->
        configuration.resolutionStrategy.force(
                [
                        'com.xxx:component:3.0.0.alpha',
                        'com.xxx:appcashier:3.0.0.alpha'
                ])
}

统一全局配置各个module的依赖版本号

subprojects {
    //修改别的字段看这个官方文档:https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.AppExtension.html
    project.afterEvaluate {
        project.plugins.withId('com.android.library') {
            println("start change config ,libName========" + project.name)
//            project.android.compileSdkVersion rootProject.ext.compileSdkVersion
//            project.android.defaultConfig.minSdkVersion rootProject.ext.minSdkVersion
//            project.android.defaultConfig.targetSdkVersion rootProject.ext.targetSdkVersion

// project.apply from: mavenScriptPath
        }
    }
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.xxx') {
                println("eachDependency========" + details.requested.name)

                if(details.requested.name.contains('component') ) {
                    details.useVersion '3.0.0.alpha'
                }
                if(details.requested.name.contains('appcashier') ) {
                    details.useVersion '3.0.0.alpha'
                }
            }
        }
        
        resolutionStrategy {
        	// force certain versions of dependencies (including transitive)
          	force 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.3.4'
            // cache dynamic versions for 10 minutes
            cacheDynamicVersionsFor 10*60, 'seconds'
            // don't cache changing modules at all
            cacheChangingModulesFor 0, 'seconds'
        }
        
         // 用源码替换maven
        resolutionStrategy.dependencySubstitution {
            // Substitute project and module dependencies
            substitute module('com.xxx:component') with project(':component')
        }
    }
}