Gradle 的依赖关系处理不当,可能导致你编译异常!解决方案在此!

作者:网友投稿 时间:2018-04-15 16:30

字号
技术沙龙 | 4月21日多位区块链专家进行区块链技术应用场景解读!

当我们作为一个初学者接触 Gradle 的时候,大部分时间在使用它来添加依赖库。而你所依赖的依赖库,可能又依赖其他的库,这非常的常见,这样的情况被称为依赖传递。

Gradle 的依赖关系处理不当,可能导致你编译异常!解决方案在此!

这样错综复杂的依赖关系,如果处理不好,可能达不到你预期的效果,而你有深究过吗?

我们带着问题来看看如何解决 Gradle 依赖关系导致的问题。

在 Android Studio 中,Gradle 构建过程对于开发者来说,很大程度上是抽象的。作为一个新的 Android 开发者,我们第一次遇到 Gradle 通常是在 build.gradle 文件中添加一个远程依赖项。

让我们看看如何阅读 Gradle 依赖关系树,并解决与依赖关系有关的问题。

这是我工作中管理的一个项目,我想将 targetVersion 升级到 27,我也在 Gradle 中,更新了新版的 appcompat-v7 支持库到最新的依赖版本 27.0.2。在更改之后,同步项目,在 build.gradle 中出现以下错误提示:

Gradle 的依赖关系处理不当,可能导致你编译异常!解决方案在此!

该错误表示我必须使用完全相同版本的支持库。可是我只在我的 build.gradle 中,使用了这个支持库。

Android Studio 的这个提示到底是什么意思?

这个错误提示中,提及到的 com.android.support:animated-vector-drawable:27.0.2或com.android.support-v4:21.0.3 是在哪里又被引用了?

Gradle 的依赖关系处理不当,可能导致你编译异常!解决方案在此!

如果只是应用程序的直接依赖库,只需要在 build.gradle 中指明依赖就好了,这样非常的清晰明了。但是实际情况并非如此,这些依赖关系可能会进一步拥有自己的依赖关系,这被称为 依赖传递 。Gradle 需要在应用中包含所有的直接或者间接的依赖。

前面 Android Studio 提示的错误信息,正是我们现在讨论的这些传递性依赖关系导致的。

Gradle 必须解决所有的这些依赖关系。包含使用了哪些库?如果两个不同的库对同一个库有不同版本的依赖关系,会发生什么问题?

要查看 Gradle 依赖关系树(Gradle 解析依赖关系的方式),我们可以到位于 Android Studio 底部的 Terminal 选项卡并输入以下命令:

gradlew app:dependencies 

这将显示所有 构建变体 的依赖关系解析树。我们可以在上面的命令中添加一个标识来查看特定构建变体的配置。例如 --configuration releaseCompileClasspath将向我们展示 release 变体的依赖树。

关于构建变体,建议阅读官方文档:

https://developer.android.com/studio/build/build-variants.html

以上是上述命令的输出:

releaseCompileClasspath - Resolved configuration for compilation for variant: release 

+--- com.android.databinding:library:1.3.1 

|    +--- com.android.support:support-v4:21.0.3 

|    |    \--- com.android.support:support-annotations:21.0.3 -> 27.0.2 

|    \--- com.android.databinding:baseLibrary:2.3.0-dev -> 3.0.1 

+--- com.android.databinding:baseLibrary:3.0.1 

+--- com.android.databinding:adapters:1.3.1 

|    +--- com.android.databinding:library:1.3 -> 1.3.1 (*) 

|    \--- com.android.databinding:baseLibrary:2.3.0-dev -> 3.0.1 

+--- com.android.support.constraint:constraint-layout:1.0.2 

|    \--- com.android.support.constraint:constraint-layout-solver:1.0.2 

\--- com.android.support:appcompat-v7:27.0.2 

     +--- com.android.support:support-annotations:27.0.2 

     +--- com.android.support:support-core-utils:27.0.2 

     |    +--- com.android.support:support-annotations:27.0.2 

     |    \--- com.android.support:support-compat:27.0.2 

     |         +--- com.android.support:support-annotations:27.0.2 

     |         \--- android.arch.lifecycle:runtime:1.0.3 

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接