在项目中的Build.Gradle文件中dependencies代码块中添加指定依赖项。
有三种不同类型的依赖项
本地模块依赖项
implementation project(':mylibrary')
这个mylibrary 必须在 settings.gradle 中使用的库名称相同
本地文件依赖项
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation files('libs/foo.jar', 'libs/bar.jar')
gradle 中的路径使用的是build.gradle的相对路径
fileTree 依赖整个目录中的文件
files 依赖多个单独的文件
依赖远程二进制文件
implementation 'com.example.android:app-magic:12.3'
依赖项配置
implementation依赖配置
- 编译打包:使用 implementation 添加的依赖 , 会 参与到 编译过程 , 并会 打包到 Apk 文件中 ;
- 不会传递:此类依赖,不会传递给其他模块;
示例: A 项目 中使用 compile 依赖 B 依赖库 , 即 A 在 编译构建时需要 B 依赖库 , 最终 B 依赖库会打包到 A 项目的 Apk 文件中 ;
如果 C 项目 依赖 A 项目 , 由于 implementation 配置不会传递依赖 , C 项目是不知道 A 项目的 B 依赖库的 , 也无法访问 B 依赖库 ;
如果使用 compile 或者 api 添加依赖 , 则会有大量的依赖传递 , 构建效率 会 非常低 , 构建时会 不停的检查依赖树 , 发现依赖传递后 , 还要 添加依赖的依赖 ;因此 这两个 依赖方式 不常用 , implementation 依赖是当前最常见的依赖方式 ;
api依赖配置
- 编译打包:依赖会参与到 编译 构建过程 , 并且会 打包到 Apk 文件 中 ;
- 依赖传递: 如果其它工程依赖本模块 , 则会 将依赖传递到其它工程 中 ;
使用场景 : 应用中使用的 基础依赖库 , 如 : 公用模块 , 工具库 , 底层库等 , 每个项目都需要该依赖库 , 适合使用依赖传递 ;
compileOnly依赖配置
- 编译过程 : 依赖只会 添加到编译路径中 , 参与 编译 构建过程 , 但是不会 打包到 Apk 文件 中 ;
- 作用时机 : 该类型依赖 , 只在编译过程中做一些辅助类的工作 , 在工程中没有使用该依赖库 ;