美文网首页gradle
用Gradle解决Android依赖问题

用Gradle解决Android依赖问题

作者: 观海云不远 | 来源:发表于2018-09-30 15:13 被阅读87次

一、配置 Gradle 命令行环境变量(MAC)

1、找到 Gradle 命令位置
如果 Android Studio 正常安装,Gradle 路径一般在 /Applications/Android\ Studio.app/Contents/gradle/gradle-[version] 目录下([version]是你安装的gradle版本,下同)
2、给 Gradle 命令添加执行权限

//给 gradle 添加执行权限
chmod 755 /Applications/Android\ Studio.app/Contents/gradle/gradle-[version]/gradle

//给 gradle.bat 添加执行权限
chmod 755 /Applications/Android\ Studio.app/Contents/gradle/gradle-[version]/gradle.bat

3、添加路径到 ~/.bash_profile 文件中
打开 ~/.bash_profile 文件(如果没有就创建一个),在文件末尾另起一行,添加如下内容并保存:

//...
export GRADLE_HOME=/Applications/Android\ Studio.app/Contents/gradle/gradle-[version]
export PATH=${PATH}:${GRADLE_HOME}/bin

4、更新 ~/.bash_profile 文件
在终端上执行 source ~/.bash_profile 命令,更新.bash_profile文件
5、验证是否配置好
重新打开终端,运行命令 gradle -v ,如果配置成功会显示如下内容:

$ gradle -v

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_171 (Oracle Corporation 25.171-b11)
OS:           Mac OS X 10.13.6 x86_64

二、用 gradle dependencies 查找依赖

进入 Android 工程根目录(或在 Android Studio 中的 Terminal 窗口),执行 gradle dependencies 命令:
假如 Android 工程的 dependencies 配置如下:

dependencies {
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile ('com.android.support:design:22.2.1')
    compile 'com.shamanland:fonticon:0.1.8'
    androidTestCompile 'com.android.support:support-annotations:22.2.1'
    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2')
}

会得到如下输出:

_debugAndroidTestApk - ## Internal use, do not manually configure ##
+--- com.android.support:support-annotations:22.2.1
+--- com.android.support.test:runner:0.3
|    +--- com.android.support.test:exposed-instrumentation-api-publish:0.3
|    +--- junit:junit:4.12
|    |    \--- org.hamcrest:hamcrest-core:1.3
|    \--- com.android.support:support-annotations:22.2.0 -> 22.2.1
\--- com.android.support.test.espresso:espresso-core:2.2
     +--- com.android.support.test.espresso:espresso-idling-resource:2.2
     +--- com.squareup:javawriter:2.1.1
     +--- javax.inject:javax.inject:1
     +--- org.hamcrest:hamcrest-library:1.3
     |    \--- org.hamcrest:hamcrest-core:1.3
     +--- com.android.support.test:rules:0.3
     |    \--- com.android.support.test:runner:0.3 (*)
     +--- org.hamcrest:hamcrest-integration:1.3
     |    \--- org.hamcrest:hamcrest-library:1.3 (*)
     +--- com.google.code.findbugs:jsr305:2.0.1
     +--- javax.annotation:javax.annotation-api:1.2
     \--- com.android.support.test:runner:0.3 (*)

...

上面输出内容即包含依赖关系

三、解决依赖

1、从依赖项中排除冲突的模块/库
当声明一个依赖,我们可以指定我们不需要的模块,例如:

compile('junit:junit:4.12'){
  exclude group : 'org.hamcrest',module:'hamcrest-core'
}

2、在build.gradle中显示定义冲突的库
另一种解决冲突的方式是我们直接明确引入我们想要包含的版本,如:

compile 'junit:junit:4.12' //依赖 org.hamcrest:hamcrest-core:1.3
androidTestCompile 'org.mockito:mockito-core:1.10.19' //依赖 org.hamcrest:hamcrest-core:1.1
androidTestCompile 'org.hamcrest:hamcrest-core:1.3' //直接在这里引入1.3

3、强制库的解析
第三种解决冲突的方式,不是声明一个配置,而是强制这个库用于所有配置。

android{
  configurations.all{
    resolutionStrategy.force 'org.hamcrest:hamcrest-core:1.1'
  }
}

四、两个小问题

1、版本冲突时,gradle会下载多个版本的依赖库吗?
A:不会,会用最新版依赖库
2、当多个模块依赖同一个库时,每个模块都会去下载该依赖库吗?
A:不会,下载第一个,之后的会忽略

相关文章

网友评论

    本文标题:用Gradle解决Android依赖问题

    本文链接:https://www.haomeiwen.com/subject/uvfwoftx.html