Android Gradle(五)dependencies节点配置

一般来说,项目的第三方依赖都是通过dependencies节点来配置我们第三方的下载路径的,常见的有 implementationapiannotationProcessorcompileOnly等。

1.implementation节点作用 :

官方文档:
Gradle 会将依赖项添加到编译类路径,并将依赖项打包到构建输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能使用该依赖项。
使用此依赖项配置代替 api 或 compile(已弃用)可以显著缩短构建时间,因为这样可以减少构建系统需要重新编译的模块数。例如,如果 implementation 依赖项更改了其 API,Gradle 只会重新编译该依赖项以及直接依赖于它的模块。大多数应用和测试模块都应使用此配置。

白话文:只有自己模块才能使用,并且不传递依赖。

2.api节点作用 :

官方文档:
Gradle 会将依赖项添加到编译类路径和构建输出。当一个模块包含 api 依赖项时,会让 Gradle 了解该模块要以传递方式将该依赖项导出到其他模块,以便这些模块在运行时和编译时都可以使用该依赖项。此配置的行为类似于 compile (现已弃用),但使用它时应格外小心,只能对您需要以传递方式导出到其他上游消费者的依赖项使用它。这是因为,如果 api 依赖项更改了其外部 API,Gradle 会在编译时重新编译所有有权访问该依赖项的模块。因此,拥有大量的 api 依赖项会显著增加构建时间。除非要将依赖项的 API 公开给单独的模块,否则库模块应改用 implementation 依赖项。

白话文:一般使用在lib_base组件中,当app主功能使用到某第三方功能时,api可以传递依赖,implementation则不会。

3.annotationProcessor节点作用 :

官方文档:
如需添加对作为注解处理器的库的依赖,您必须使用 annotationProcessor 配置将其添加到注解处理器的类路径。这是因为,使用此配置可以将编译类路径与注释处理器类路径分开,从而提高构建性能。如果 Gradle 在编译类路径上找到注释处理器,则会禁用避免编译功能,这样会对构建时间产生负面影响(Gradle 5.0 及更高版本会忽略在编译类路径上找到的注释处理器)。
如果 JAR 文件包含以下文件,则 Android Gradle 插件会假定依赖项是注释处理器:
META-INF/services/javax.annotation.processing.Processor 。 如果插件检测到编译类路径上包含注解处理器,则会产生构建错误。

白话文:注解处理器,kotlin项目中应使用kapt。例如APT技术

4.compileOnly节点作用 :

官方文档:
Gradle 只会将依赖项添加到编译类路径(也就是说,不会将其添加到构建输出)。如果您创建 Android 模块时在编译期间需要相应依赖项,但它在运行时可有可无,此配置会很有用。
如果您使用此配置,那么您的库模块必须包含一个运行时条件,用于检查是否提供了相应依赖项,然后适当地改变该模块的行为,以使该模块在未提供相应依赖项的情况下仍可正常运行。这样做不会添加不重要的瞬时依赖项,因而有助于减小最终 APK 的大小。此配置的行为类似于 provided (现已弃用)。

白话文:不会打包到apk中,适用于帮助工程构建,例如:插件的编写。

5.runtimeOnly节点作用 :

官方文档:Gradle 只会将依赖项添加到构建输出,以便在运行时使用。也就是说,不会将其添加到编译类路径。此配置的行为类似于 apk(现已弃用)。

白话文:编译器不可见,但是会打包到APK里,运行时可见,这个一般用在路由里。

6.dependencies节点作用

6.1 资源的下载,这个就比较常见了,举例如下:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
6.2 第三方SDK的版本指定,或者force一个全局版本,举例如下:
implementation("androidx.appcompat:appcompat:1.1.0"){
        force true
    }
//全局指定一个版本,注意节点是跟android同级
configurations {
    all*.exclude group: 'com.aliyun.ams', module: 'alicloud-android-utdid'
}
// 统一版本依赖 强制指定版本,注意节点是跟android同级
configurations.all {
	resolutionStrategy {
		force "com.github.bumptech.glide:glide:$glide_version"
	}
}

6.3 资源剔除,举例如下:
  implementation ('androidx.appcompat:appcompat:1.1.0'){
        //exclude 排除androidx.appcompat:appcompat:1.1.0 下的 androidx.annotation:annotation: 依赖
        //androidx.annotation:annotation:
        exclude group:"androidx.annotation" ,module:"annotation"
    }
6.4 传递依赖,举例如下:
  implementation ('androidx.appcompat:appcompat:1.1.0'){
       //返回是否应解决此依赖项,包括或排除其传递依赖项。 true 传递依赖 false 不传递
       isTransitive(true)
    }

提示:在Android Studio的最新版本中,默认没有
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
因为如果项目使用到jar包,aar包很容易造成项目之间的资源冲突。所以官方更加推荐通过implementation进行导入。

7.节点总结

Android Gradle(五)dependencies节点配置_第1张图片

你可能感兴趣的:(#,Gradle,android,gradle)