美文网首页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