Gradle & Google Cast 的瞬态依赖

Transient dependencies with Gradle & Google Cast

我刚刚将我的 Android-app 更新为 buildToolsVersion“23.0.1”,并且还想更新投射到 Chromecast 所需的库。

这些库是:

dependencies {
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:mediarouter-v7:23.1.0'
    compile 'com.google.android.gms:play-services-cast:7.8.0'
}

在对版本进行了一段时间的测试后(play-services-cast:8.1.0 引入了 ProGuard 问题),我意识到我也可以这样依赖:

dependencies {
    compile 'com.google.android.gms:play-services-cast:7.8.0'
}

所以这意味着,appcompat 和 mediarouter 似乎是 play-services-cast 的临时依赖项。

谁能告诉我发生了什么,推荐的方法是什么?

  1. 像以前一样声明 appcompat、mediarouter + play-services-cast,因为这样瞬态依赖性就被忽略了?
  2. 只使用 play-services-cast 并使用其对 appcompat 和 mediarouter 的瞬时依赖性?

我自己声明的appcompat&mediarouter用的是什么版本?还是使用多个版本?

首先,请将您的播放服务更新到8.1.0;那已经出来了,并且有许多改进。现在回到你的主要问题。您可以通过 运行 gradle dependencies 获取依赖关系树。假设我们有一个依赖于 cast、媒体路由器和 appcompat 的简单项目。如果我不将最后两个添加为依赖项,那么 gradle 报告我的依赖项树的内容如下:

_debugCompile - ## Internal use, do not manually configure ##
\--- com.google.android.gms:play-services-cast:8.1.+ -> 8.1.0
     +--- com.google.android.gms:play-services-base:8.1.0
     |    \--- com.google.android.gms:play-services-basement:8.1.0
     |         \--- com.android.support:support-v4:22.2.0
     |              \--- com.android.support:support-annotations:22.2.0
     \--- com.android.support:mediarouter-v7:22.2.0
          \--- com.android.support:appcompat-v7:22.2.0
               \--- com.android.support:support-v4:22.2.0 (*)

如您所见,对于我的8.1.0版本的投射服务,它正在获取支持库的v22.2.0。由于它实际上在我的本地存储库中可用(作为我的 Android SDK 的一部分),它发现并且我可以编译我的项目而无需添加显式的 appcompat 和 mediarouter 依赖项。但是,如果我转到我的本地存储库(例如,在 <SDK_HOME>/extras/android/m2repository/com/android/support/mediarouter-v7 中并重命名其中包含媒体路由器 v22.2.0 的 22.2.0 目录并尝试再次编译我的项目,它会失败。 现在,如果我将对 appcompat 和 mediarouter (v23.1) 的依赖项添加回构建 gradle,它会找到那些新库并使用它们;这是 gradle dependencies 树:

_debugCompile - ## Internal use, do not manually configure ##
+--- com.android.support:appcompat-v7:23.1.+ -> 23.1.0
|    \--- com.android.support:support-v4:23.1.0
|         \--- com.android.support:support-annotations:23.1.0
+--- com.android.support:mediarouter-v7:23.1.+ -> 23.1.0
|    +--- com.android.support:appcompat-v7:23.1.0 (*)
|    \--- com.android.support:palette-v7:23.1.0
|         \--- com.android.support:support-v4:23.1.0 (*)
\--- com.google.android.gms:play-services-cast:8.1.+ -> 8.1.0
     +--- com.google.android.gms:play-services-base:8.1.0
     |    \--- com.google.android.gms:play-services-basement:8.1.0
     |         \--- com.android.support:support-v4:22.2.0 -> 23.1.0 (*)
     \--- com.android.support:mediarouter-v7:22.2.0 -> 23.1.0 (*)

这是个好消息;因此,为了回答您的问题,请包括您最新版本的依赖项,因为它们修复了旧错误并具有更新的功能。