文章摘要
1、 三种依赖类型
2、库依赖关系配置
3、远程仓库
4、查看依赖关系树
Android Studio中的摇篮构建系统可以很容易地包括外部的二进制文件或其他库模块到您的构建与依赖。该依赖性可以位于您的计算机上或远程仓库中,他们宣布任何传递依赖将自动包括在内。
一、依赖类型
要添加一个依赖于你的项目,指定诸如依赖配置compile在dependencies您的块build.gradle文件。
例如,下面build.gradle为应用模块文件包括三种不同类型的依赖关系:
apply plugin: 'com.android.application'
android { ... }
dependencies {
// Dependency on a local library module
compile project(":mylibrary")
// Dependency on local binaries
compile fileTree(dir: 'libs', include: ['*.jar'])
// Dependency on a remote binary
compile 'com.example.android:app-magic:12.3'
}
每个这些要求不同类型的依赖关系如下:
- 1、本地库模块依赖
compile project(':mylibrary')
此声明一有依赖性的Android库模块 名为“在MyLibrary”(此名称必须定义为库名称相匹配include你的settings.gradle文件)。它需要构建系统编译库模块与应用模块,并在您的APK所产生的AAR文件。
- 2、本地二进制依赖
compile fileTree(dir: 'libs', include: ['*.jar'])
由于Gradle读取相对路径的build.gradle 文件,这告诉构建系统添加您的项目内的所有JAR文件 module_name/libs/的目录的依赖。
或者,您可以指定单独的文件如下:
compile files('libs/foo.jar', 'libs/bar.jar')
- 3、远程二进制依赖
compile 'com.example.android:app-magic:12.3'
这实际上是以下简写:
compile group: 'com.example.android', name: 'app-magic', version: '12.3'
这宣告了“应用程序魔”库的12.3版本的依赖,在“code.example.android”命名空间组内。
注意:这样的远程依赖性要求你申报相应的远程资源库,其中摇篮应该寻找库。如果库已经不存在本地,摇篮从远程站点时,构建需要它(当您单击如拉它同步工程与摇篮文件 或当您运行构建)。
二、库依赖关系配置
内侧dependencies块,可以声明使用几种不同的一个库依赖依赖关系配置(诸如compile上面示出)。每个相关配置提供了摇篮有关如何使用图书馆不同的指令。下面的列表描述了每个可使用在你的Android项目库依赖的配置。
注:虽然 Java Plugin for Gradle 提供了类似于下面定义的依赖关系配置,你不能在你的Android使用它们的项目,只有下面配置了Android Plugin for Gradle兼容。
- compile
摇篮增加依赖于编译类路径,并在APK。 - apk
摇篮增加了依赖性只有APK(它不添加到编译类路径)。
注意:您可以使用apk只为JAR二进制依赖。它不支持库模块或AAR二进制依赖。
- provided
摇篮增加依赖于编译类路径中唯一(它不添加到APK)。
当你创建一个,这是有用的Android库模块 ,你在编译过程中需要的依赖性,但它是可选的有在运行时出现。也就是说,如果你使用这种配置,那么你的库模块必须包括一个运行状况检查依赖性是否可用,然后优雅地改变其行为,如果它没有提供它仍然可以正常工作。这有助于通过不添加短暂的依赖关系不是关键减少最终APK的大小。
您也可以在Android应用模块中,当你依赖的是,你需要在编译时的JAR文件使用,并且您可以安全地假设已经在运行时可用(因此你不希望将它复制到你的APK) 。或者,也许你想编译反对使用指定的JAR provided配置,但使用apk 的配置来包装不同的JAR到APK,其中包括需要在运行相同的API。
注意:如果你要创建一个Android应用程序模块,则不能使用 provided了AAR的依赖,只为JAR文件。在Android库模块,你可以用它两个JAR和AARS。
以上配置适用于项目的主要来源集,它适用于所有的构建变种。
如果你不是想声明的依赖只有特定的 构建变量源设置或更改一个 测试源设置,你必须利用配置名称以及与构建变量或测试源集的名称前缀它。
例如,在添加compile
依赖关系只为您的“免费”产品的风味(使用远程二进制依赖),它看起来像这样:
dependencies {
freeCompile 'com.google.firebase:firebase-ads:9.8.0'
}
但是,如果你想添加一个依赖于结合了产品的风味变体和构建类型,那么你必须初始化的配置名称configurations块。下面的示例增加了一个apk依赖于你的“freeDebug”打造变种(使用本地二进制依赖):
configurations {
// Initializes a placeholder for the freeDebugApk dependency configuration.
freeDebugApk {}
}
dependencies {
freeDebugApk fileTree(dir: 'libs', include: ['*.jar'])
}
要添加compile为本地测试和仪表测试的依赖性,它看起来像这样:
dependencies {
// Adds a remote binary dependency only for local tests.
testCompile 'junit:junit:4.12'
// Adds a remote binary dependency only for the instrumented test APK.
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}
如果你的库模块提供了多个变种,你可以添加不同的库变体像这样不同的应用程序变量:
dependencies {
// Adds the 'debug' varaint of the library to the debug varaint of the app
debugCompile project(path: ':my-library-module', configuration: 'debug')
// Adds the 'release' varaint of the library to the release varaint of the app
releaseCompile project(path: ':my-library-module', configuration: 'release')
}
三、远程仓库
当你的依赖比当地的图书馆或文件树以外的东西,摇篮会在哪个在线存储库中指定的文件 repositories的块build.gradle文件。
默认情况下,新的Android Studio项目申报JCenter作为该项目的顶级存储库位置build.gradle的文件,如下图所示:
allprojects {
repositories {
jcenter()
}
}
如果你想从Maven的中央仓库的东西,然后再添加 mavenCentral(),或本地存储库使用mavenLocal():
allprojects {
repositories {
jcenter()
mavenCentral()
mavenLocal()
}
}
参考配置:
allprojects {
repositories {
maven {
url "https://repo.example.com/maven2"
}
maven {
url "file://local/repo/"
}
ivy {
url "https://repo.example.com/ivy"
}
}
}
四、查看依赖关系树
有些直接依赖可能有自己的依赖。这些被称为 传递依赖。而不是要求您手动声明每个传递依赖,摇篮自动收集,并增加了它们。为了形象化两个项目的直接和传递依赖,对于摇篮的Android插件提供了生成依赖关系树为每个摇篮任务构建变量和 测试源集合。
要生成此报告,步骤如下:
-
1、选择视图>工具的Windows>Gradle(或单击 Gradle中的工具窗口栏)。
-
2、展开AppName的 >任务>的android并双击androidDependencies。
-
3、要查看报告,选择查看>工具的Windows>摇篮控制台。
下面的示例报告显示调试构建变量的依赖关系树,包括前面例子中的本地库模块依赖和远程依赖性。
Executing tasks: [androidDependencies]
:app:androidDependencies
debug
/**
* Both the library module dependency and remote binary dependency are listed
* with their transitive dependencies.
*/
+--- MyApp:mylibrary:unspecified
| \--- com.android.support:appcompat-v7:26.0.0
| +--- com.android.support:animated-vector-drawable:26.0.0
| | \--- com.android.support:support-vector-drawable:26.0.0
| | \--- com.android.support:support-v4:26.0.0
| | \--- LOCAL: internal_impl-26.0.0.jar
| +--- com.android.support:support-v4:26.0.0
| | \--- LOCAL: internal_impl-26.0.0.jar
| \--- com.android.support:support-vector-drawable:26.0.0
| \--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
\--- com.android.support:appcompat-v7:26.0.0
+--- com.android.support:animated-vector-drawable:26.0.0
| \--- com.android.support:support-vector-drawable:26.0.0
| \--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
+--- com.android.support:support-v4:26.0.0
| \--- LOCAL: internal_impl-26.0.0.jar
\--- com.android.support:support-vector-drawable:26.0.0
\--- com.android.support:support-v4:26.0.0
\--- LOCAL: internal_impl-26.0.0.jar
...
网友评论