Android的Gradle技巧 1.5添加Java库依赖关系

32 篇文章 0 订阅
1.5添加Java库依赖关系
问题
您想要向Android应用程序添加其他Java库。

将组,名称和版本添加到应用程序模块中包含的build.gradle文件中的依赖关系块。
讨论
默认情况下,Android应用程序有两个build.gradle文件:一个在顶层,一个为应用程序本身。后者通常存储在称为pp的子目录中。
在app目录中的build.gradle文件中,有一个名为dependencies的块。示例1-13显示了来自Android Studio生成的新Android应用程序的示例。
实例1-13。新Android项目中的默认依赖关系
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
基本语法
Gradle支持列出依赖项的几种不同方式。最常见的是使用带有冒号分隔的组,名称和版本值的引号。 Gradle文件使用Groovy,它支持单引号和双引号字符串。双引号允许插值或变量替换,但在其他方面相同。有关详细信息,请参阅附录A.
每个依赖关系都与配置相关联。 Android项目包括compile,runtime,testCompile和testRuntime配置。插件可以添加其他配置,您还可以定义自己的配置。
依赖关系的完整语法显式地调用组,名称和版本号(示例1-14)。
实施例1-14。依赖关系的完整语法
testCompile组:'junit',name:'junit',version:'4.12'
实施例1-14的结果完全等同于实施例1-15。
实施例1-15。依赖关系的快捷方式
testCompile'junit:junit:4.12'
这是在默认构建文件中使用的快捷方式。
尽管不推荐,但合法地指定带有加号的版本号,如示例1-16所示。
实施例1-16。版本号作为变量(不推荐)
testCompile'junit:junit:4. +'
这告诉Gradle需要大于或等于4.0的任何版本的JUnit来编译项目的测试。虽然这样做,它使得构建更少确定性,因此重现性较差。显式版本号还保护您不受特定API的更高版本中的更改的影响。
为依赖关系添加显式版本号。这保护您免受后来在依赖库中的更改,并使您的构建可重现。
如果要将一组文件添加到配置而不将其添加到存储库,则可以在依赖性块中使用文件或fileTree语法(示例1-17)。

实例1-17。文件和目录依赖关系

dependencies {
compile files('libs/a.jar', 'libs/b.jar')
compile fileTree(dir: 'libs', include: '*.jar')
}
最后一行使用与默认Gradle构建文件中使用的语法相同的语法。
接下来,Gradle需要知道在哪里搜索以解决依赖关系。这是通过一个知识库块。
同步项目
Android Studio监视Gradle构建文件,并提供自动同步新更改的功能。
例如,考虑在应用程序项目中将Retrofit 2项目添加到build.gradle中。
如图1-10所示,在对build.gradle文件进行任何更改后,Android Studio可以同步项目。这将下载任何必需的库并将其添加到项目。


图1-10。 Android Studio提供的同步项目依赖项单击SycNow链接后,下载的库将显示在项目窗口的外部库部分(图1-11)。


图1-11。外部图书馆
在这种情况下,改进依赖性还将okhttp和okio库添加为传递依赖性,如图1-12所示。
如果您错过了点击立即同步链接的机会,Android Studio会在工具栏中提供用于相同目的的特殊图标,以及菜单项。


图1-12。同步项目与Gradle文件按钮和菜单项
传递依赖
有一个老笑话,将Maven定义为下载互联网的DSL。如果这是真的Maven,这也是真的Gradle。两个下载传递依赖,它们是依赖于其他库的库。
在常规Java项目中,Gradle命令依赖项可用于查看传递依赖项。 Android项目使用androidDependencies命令。
考虑示例1-13的依赖性块。运行androiddependen cies任务给出了示例1-18中所示的输出。
实例1-18。查看Android依赖项

> ./gradlew androidDependencies
:app:androidDependencies
debug
\--- com.android.support:appcompat-v7:23.3.0
+--- com.android.support:support-vector-drawable:23.3.0
| \--- com.android.support:support-v4:23.3.0
| \--- LOCAL: internal_impl-23.3.0.jar
+--- com.android.support:animated-vector-drawable:23.3.0
| \--- com.android.support:support-vector-drawable:23.3.0
| \--- com.android.support:support-v4:23.3.0
| \--- LOCAL: internal_impl-23.3.0.jar
\--- com.android.support:support-v4:23.3.0
\--- LOCAL: internal_impl-23.3.0.jar
debugAndroidTest
No dependencies
debugUnitTest
No dependencies
release
\--- com.android.support:appcompat-v7:23.3.0
+--- com.android.support:support-vector-drawable:23.3.0
| \--- com.android.support:support-v4:23.3.0
| \--- LOCAL: internal_impl-23.3.0.jar
+--- com.android.support:animated-vector-drawable:23.3.0
| \--- com.android.support:support-vector-drawable:23.3.0
| \--- com.android.support:support-v4:23.3.0
| \--- LOCAL: internal_impl-23.3.0.jar
\--- com.android.support:support-v4:23.3.0
\--- LOCAL: internal_impl-23.3.0.jar
releaseUnitTest
No dependencies
调试和发行版本都使用Android支持库中的appcompat-v7库。该库依赖于support-v4库等,它使用Android SDK中的内部jar。
手动管理传递依赖性听起来像一个好主意,直​​到你真正尝试这样做。复杂性增长迅速,不能很好地扩展。 Gradle非常善于解决依赖项之间的版本问题。
尽管如此,Gradle提供了包含和排除单个库的语法。
默认情况下,Gradle遵循传递依赖性。如果要为特定库关闭它,请使用传递标志(示例1-19)。
实例1-19。禁用传递依赖性
dependencies {
runtime group: 'com.squareup.retrofit2', name: 'retrofit', version: '2.0.1',
transitive: false
}
将传递标记的值更改为false会阻止传递依赖性的下载,因此您必须自己添加所需的内容。
如果你只想要一个模块jar,没有任何额外的依赖,你也可以指定它(例1-20)。
实例1-20。仅限模块jar的完整语法
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.4@jar' //1
compile group: 'org.codehaus.groovy', name: 'groovy-all',
version: '2.4.4', ext: 'jar' //2
}

1快捷方式
2完整版
快捷方式标记使用@符号,而完整版本设置ext(用于扩展名)值。
您还可以在依赖关系块中排除传递依赖关系(示例1-21)。
实例1-21。排除依赖关系

dependencies {
androidTestCompile('org.spockframework:spock-core:1.0-groovy-2.4') {
exclude group: 'org.codehaus.groovy'
exclude group: 'junit'
}
}
在这种情况下,spock-core项目排除了Groovy依赖项和JUnit库,这两者都通过其他方式包括。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值