Chapter3:Gradle依赖管理
文章目录
- Chapter3:Gradle依赖管理
- 3.1 依赖仓库
- 3.2 本地依赖
- 3.3 依赖概念
- 3.4 参考资料
3.1 依赖仓库
3.2 本地依赖
- 手动依赖需要:找到依赖->下载JAR文件->拷贝到项目->引用,十分复杂。使用依赖仓库可以解决个问题,依赖仓库可以看做是文件的集合。Gradle默认情况下没有为项目定义任何依赖仓库,需要在 repositories代码块中添加(使用Android Studio会自动帮你添加上)。
repositories { jcenter() }
- Gradle 支持三种不同的依赖仓库:
- 1.Maven
- 2.Ivy
- 3.静态文件或文件夹
- 在构建执行的阶段,所需的依赖会从依赖仓库中获取出来。Gradle有本地缓存,一个特定版本的依赖只会在本地下载一次。
- 依赖构成:group(创建该依赖库的组织的反向域名)、name(依赖库的唯一标识)、version(依赖库版本号)。
dependencies { implementation 'com.jakewharton:butterknife:10.2.0' } //完整Groovy映射标识 dependencies { implementation group:'com.jakewharton', name:'butterknife',version:'10.2.0' }
注意:对于一个依赖,唯一需要的字段是name。group、version为可选字段:添加group会使表述更清晰;添加verison,可以防止依赖库自动更新导致构建失败。
- Gradle预定义了三个Maven仓库:JCenter、Maven Central、本地Maven仓库。
repositories { jcenter() mavenCentral() mavenLocal() }
补充:JCenter和Maven Central一般不同时使用,推荐JCenter。(JCenter是Maven Central的超集,支持HTTPS)。Gradle的本地缓存在 C:\Users\用户名\.gradle\caches\ 中。
- 添加远程仓库:
- maven:
//http://maven.aliyun.com/nexus/content/groups/public/是阿里巴巴提供的境内仓库 repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} }
- Ivy:
repositories { ivy{ url 'http://XXXXXXXXXXXXX'} }
- 需要凭证的情况:
//建议使用单独的Gradle属性文件存储凭证 repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' credentials{ username 'user' password 'secretpassword' } } }
- 添加本地仓库:
repositories { maven{ url '../repo' } }
//添加一个常用文件夹作为仓库 repositories { flatDir { dirs('aars', '../moduleName/aars') } }
3.3 依赖概念
- 文件依赖:
//单个文件 dependencies { implementation files('libs/example.jar') } //文件夹 dependencies { implementation fileTree('libs') } //添加过滤器,只依赖文件夹中的jar格式文件 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) }
- 原生依赖库:
.so 文件。Android插件支持原生依赖库,需要在模块层创建jniLibs文件夹,然后为每个平台创建子文件夹,将 .so文件放到适当的文件夹中。
文章图片
//注意是 android代码块 android { sourceSets { main { jniLibs.srcDirs = ['src/main/libs'] } } }
- 依赖项目:
- 如果在项目中创建了一个模块作为依赖项目需要:1.在settings.gradle中添加该模块,2.在需要该依赖的模块的build.gradle中添加该依赖库。
include ':app' , ':library'
dependencies{ implementation project(path: ':library') }
- 使用 .aar 文件:
- 对于Android Library模块编译后,会在该模块的 build/output/arr/ 文件夹生成 .aar 文件。
- 可以将**.arr**文件复制到一个文件夹中,将该文件夹作为依赖仓库。然后在需要的模块添加该依赖。
repositories { flatDir { dirs('aars', '../moduleName/aars') } }
dependencies{ implementation(name: 'aar包名', ext: 'aar') }
3.4 参考资料
- 依赖配置:如果你想使用某厂商的蓝牙SDK,为了能够编译该代码,你需要将SDK添加至编译类路径,但是你并不需要添加SDK到你的APK中,因为设备内置了SDK,这里就需要应用到依赖配置。Gradle提供的几种依赖项:
- 注意:compile已经被弃用了!
- 1.implementation:Gradle 会将依赖项添加到编译类路径,并将依赖项打包到编译输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能使用该依赖项。
- 2.api:Gradle 会将依赖项添加到编译类路径和编译输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。
- 3.compileOnly:Gradle 只会将依赖项添加到编译类路径(也就是说,不会将其添加到编译输出)。如果您创建 Android 模块时在编译期间需要相应依赖项,但它在运行时可有可无,此配置会很有用。
- **4.runtimeOnly:**Gradle 只会将依赖项添加到编译输出,以便在运行时使用。也就是说,不会将其添加到编译类路径。
- 5.annotationProcessor:要添加对作为注解处理器的库的依赖关系,您必须使用 annotationProcessor配置将其添加到注解处理器类路径。这是因为,使用此配置可以将编译类路径与注解处理器类路径分开,从而提高编译性能。
- 6.lintChecks:使用此配置可以添加您希望 Gradle 在编译项目时执行的 Lint 检查。
- 7.lintPublish:在 Android 库项目中使用此配置可以添加您希望 Gradle 编译成 lint.jar 文件并打包在 AAR 中的 Lint 检查。这会使得使用 AAR 的项目也应用这些 Lint 检查。如果您之前使用 lintChecks 依赖项配置将 Lint 检查包含在已发布的 AAR 中,则需要迁移这些依赖项以改用 lintPublish 配置。
- 8.testImplementation、androidTestImplementation:添加用于测试的额外以案例库,在运行测试时会被使用。
- 9.debugImplementation、releaseImplementation等debug/release前缀的:用于针对不同构建 variant 生成不同配置。(比如只想在Debug构建中使用的Logging框架。)
- 语义化版本:将依赖添加到JCenter等依赖仓库是,约定遵守的一套版本化规则,称为语义化版本。语义化版本中,版本的数字格式一般为 major.minor.patch:
- 当做不兼容的API变化时,major版本增加。
- 当做相互兼容的方式添加功能时,minor版本增加。
- 当修复一些bug时,patch版本增加。
- 动态化版本:
- 在一些情况下,你可能希望在每次构建你的应用或者依赖库是,都能够获取到最新的依赖。
//获取最新的patch版本 implementation 'com.jakewharton:butterknife:10.2.+' //获取最新的minor版本 implementation 'com.jakewharton:butterknife:10.2+' //获取最新依赖库中的版本 implementation 'com.jakewharton:butterknife:+'
【Android学习笔记|Chapter3:Gradle依赖管理】注意:获取最新版本时,可能因为依赖版本不稳定导致构建失败。
- Gradle For Android
- 官方依赖项说明
推荐阅读
- 数据结构和算法|LeetCode 的正确使用方式
- #|7.分布式事务管理
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- #|算法设计与分析(Java实现)—— 动态规划 (0-1 背包问题)
- #|阿尔法点亮LED灯(一)汇编语言
- #|Multimedia
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- 基础课|使用深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索算法求解 (n^2 -1) 数码难题,耗时与内存占用(时空复杂度)对比(附((n^2 - 1) 数码问题控
- #|学习笔记 | Ch05 Pandas数据清洗 —— 缺失值、重复值、异常值
- win10|搏一搏 单车变摩托,是时候捣鼓一下家中的小米电视机啦。