android

Android学习笔记——Gradle依赖那些事儿

2019-02-20  本文已影响30人  Rannver

踩了两天gradle的坑,复盘一波。。

一、 关于gradle依赖

apply plugin: 'com.android.application'

android { ... }

dependencies {
    // Dependency on a local library module
    implementation project(":libraryName")

    // Dependency on local binaries
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    // Dependency on a remote binary
    implementation 'com.example.android:app-magic:12.3'
}

依赖类型:

1. 本地library依赖

implementation project(":libraryName")

直接依赖本地工程库的代码,libraryName需要在settings.gradle中使用include标签定义,告诉AndroidStudio本地有哪些model。
2. 本地二进制(jar)依赖

implementation fileTree(dir: 'libs', include: ['*.jar'])

用于依赖工程本地的jar文件,dir是module_name/目录下的jar文件(Gradle的路径是根据build.gradle下指定的路径,不是绝对路径)
依赖单个jar:

implementation files('libs/XXX.jar', 'libs/XXX.jar')

3.远程二进制依赖

implementation 'com.android.support:support-annotations:27.1.1'

最熟悉的一种依赖,常用与一些三方库依赖。它的全部写法是:

implementation group: 'com.android.support', name: 'support-annotations', version: '27.1.1'

version也可以写成27.1+的形式,但是不推荐,可能会由于库的版本升级造成风险点。在AS3.0之后大部分的project都要声明远程仓库(jcenter(),google(),maven等),在一些情况下这些声明由于网络环境原因会导致我们无法编译,如果没有科学手段,可以使用国内的一些镜像。

二、依赖配置

目前gradle版本支持的依赖配置有很多:implementation、api、compileOnly、runtimeOnly 和 annotationProcessor等等,比较常用的是api和implementation,官方更推荐使用implementation,api是已经废弃的compile的替代者。

三、如何查看依赖树

当出现依赖冲突的时候,我们需要对依赖进行排查找出冲突的地方。这里推荐使用两种:(其他方法也可以,萝卜白菜各有所爱哈)

  1. gradlew命令
./gradlew 模块名:dependencies

这个命令会打印出该模块下的所有第三方类库的依赖情况,有多种展示情况,complie编译时的,Runtime运行时(打到APK包时)的。

  1. 插件GradleView
    一个第三方插件,能够快速的查询出当前project的所有model的依赖,懒人必备~

四、依赖冲突

最近两天一直踩的坑,解冲突解到怀疑人生,根本原因其实是项目用的依赖版本较低,在依赖新的库的时候会和旧的库产生冲突,会报类似于下面的错误:

Program type already present com.example.TestLog

解决办法:

    api (XXX){
        exclude group: 'com.xxxx.xxx', module: 'xxx'
    }
    
如:com.android.support:support-annotations:27.1.1
    //将support-v4丢弃使用项目中的support-v4包
    api (com.android.support:support-annotations:27.1.1){
        exclude group: 'com.android.support', module: 'support-v4'
    }

参考文章:https://juejin.im/post/5c1700f5f265da614312f794

上一篇下一篇

猜你喜欢

热点阅读