android studio 版本升级到 3.x.x 之后版本,gradle有啥变化呢?
Gradle依赖变化
3.0前 | 3.0后 | 说 明 | 作 用 |
---|---|---|---|
compile | implem-entation | 依赖项在编译时对模块可用,并且仅在运行时对模块的消费者可用。 对于大型多项目构建,使用implementation而不是api/compile可以显著缩短构建时间,因为它可以减少构建系统需要重新编译的项目量。 大多数应用和测试模块都应使用此配置。 | 使用implementation方式来依赖项目或库,该库在编译时,只对当前的module可见,对其他的module不可见。 |
compile | api | 依赖项在编译时对模块可用,并且在编译时和运行时还对模块的消费者可用。 此配置的行为类似于compile(现在已弃用),一般情况下,您应当仅在库模块中使用它。 应用模块应使用implementation,除非您想要将其 API 公开给单独的测试模块。 | 使用api方式来依赖项目或库,该库在编译和运行时都可以对其他module可见。 |
provided | compile-Only | 依赖项仅在编译时对模块可用,并且在编译或运行时对其消费者不可用。 此配置的行为类似于provided(现在已弃用)。 | 使用compileOnly方式来依赖项目或库,该库仅在编译时有效可用。 |
apk | runtime-Only | 依赖项仅在运行时对模块及其消费者可用。 此配置的行为类似于apk(现在已弃用)。 | 使用runtimeOnly方式来依赖项目或库,该库仅在运行时有效可用。 |
3.0前依赖方式 | 3.0后依赖方式 | |
---|---|---|
compile | implemention/api | |
provided | compileOnly | |
apk | runtimeOnly | |
testCompile | testImplemention | |
debugompile | debugImplemention | |
releaseCompile | releaseImplemention |
Gradle依赖配置指令
- implementation(compile):只在内部使用此module,不会向外部暴露其依赖的module内容。
- api(compile):和 compile
的作用一样,当前module会暴露其依赖的其他module内容。使用该方式依赖的库将会参与编译和打包。 - compileOnly(provided):使用该方式依赖的库只在编译时有效,不会参与打包 。
- runtimeOnly(apk):使用该方式依赖的库只在生成apk的时候参与打包,编译时不会参与。
- testImplementation(testCompile): 只在单元测试代码的编译以及最终打包测试apk时有效。
- debugImplementation(debugCompile):只在debug模式的编译和最终的debug apk打包时有效。
- releaseImplementation(releaseCompile):仅仅针对Release 模式的编译和最终的Release apk打包。
implementation 和 api 的区别
- implementation:该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开,不具有依赖的传递性。gradle构建速度比api要快。
- api:等同于compile指令,该操作命令会修改外部接口,module和所有依赖的module都需要重新编译,具有依赖传递性。gradle构建速度比implementation慢。
Project build.gradle
- buildscript: 用来加载gradle脚本自身需要使用的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等
- repositories 表示代码仓库的下载来源
- jcente 是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优
- google 是google的代码托管仓库
- dependencies一般是执行Gradle需要的gradle工具
- classpath 执行gradle需要的工具地址,一般版本号同studio版本保持一致
- allproject 是整个项目的配置,比如 allproject中的repositories和上面buildscript的区别就是:前者allproject是整个项目本身需要的依赖,后者是gradle脚本执行所需依赖(Gradle插件),分别是对应的maven仓库和插件依赖等
- task clear 运行gradle clean时,执行此处定义的task。该任务继承自Delete,删除根目录中的build目录。