@aar 不加 @aar 以及 transitive = true
library可以通过多种格式上传到远程仓库,比如大部分情况下用到的.jar或.aar。当没有指定@后缀的话,依赖的时候将会下载它的默认格式(由上传方定义,如果没有定义则默认为.jar)的Library库。如果指定了@后缀,那么默认看不到它下面的依赖树,为了保证所有的依赖树可以下载下来,即看到此模块下面的依赖树,那么需要这样来定义:
compile ('com.android.support:appcompat-v7:22.1.1@aar') {transitive = true
}
而如果没有指定@后缀,即:
compile ('com.android.support:appcompat-v7:22.1.1')
那么所有的依赖树均可以下载下来。
原文链接
implement & api
实际问题:即使使用
@arr
+transitive = true
,或者直接不加@aar
,但是编译报错,说明并没有实现依赖传递。
implementation:会添加依赖到编译路径,并且会将依赖打包到输出(aar 或 apk),但是在 编译 时不会将依赖的实现暴露给其他module,也就是只有在 运行 时其他module才能访问这个依赖中的实现。
api:与 implementation 在功能上一致,会添加依赖到编译路径,并且会将依赖打包到输出(aar 或apk)。与 implementation 不同,这个依赖可以传递,其他 module 无论在编译时和运行时都可以访问这个依赖的实现。
changing = true
想要弄明白 changing = true,首先得先了解 dynamic version & changing version。
dynamic version & changing version
dynamic version:可以是一个版本范围(如 2.+
),也可以是使用了最新版本的占位符如 latest.integration
;
changing version:通常被称为 snapshot versions,snapshot versions 包含后缀 -SNAPSHOT
. Gradle 足够灵活,可以将任何版本视为changing version,需要做的就是将属性
ExternalModuleDependency.setChanging(boolean)
设置为true,即:
{changing = true
}