Gradle& amp;瞬态依赖性谷歌演员

时间:2015-10-22 15:20:23

标签: android gradle dependencies google-play-services

我刚刚将我的Android应用更新为buildToolsVersion“23.0.1”,并且还希望更新Casting到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?
  3. 什么版本的appcompat&如果我自己声明它们,会使用mediarouter吗?或者是使用多个版本?

1 个答案:

答案 0 :(得分:1)

首先,请将您的游戏服务更新至8.1.0;已经出局并有许多改进。现在回到你的主要问题。您可以通过运行gradle dependencies来获取依赖关系树。让我们假设我们有一个简单的项目,依赖于演员,媒体路由器和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 (*)

这是一个好消息;所以要回答你的问题,请包含你最新版本的依赖项,因为它们修复了旧的bug,并在其中有更新的功能。