android - Gradle 和 Google Cast 的 transient 依赖

标签 android gradle dependencies google-play-services

我刚刚将我的 Android 应用更新为 buildToolsVersion “23.0.1”,并且还想更新 Casting to 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-problems),我意识到我也可以只使用这个依赖项:
dependencies {
    compile 'com.google.android.gms:play-services-cast:7.8.0'
}

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

谁能告诉我会发生什么以及推荐的方法是什么?
  • 像以前一样声明appcompat,mediarouter + play-services-cast,因为这样会省略 transient 依赖?
  • 只需使用 play-services-cast 并将其 transient 依赖项用于 appcompat 和 mediarouter?

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

    最佳答案

    首先,请将您的播放服务更新到 8.1.0;那已经出来了,并且有一些改进。现在回到你的主要问题。您可以通过运行 gradle dependencies 获得依赖关系树。 .假设我们有一个简单的项目,它依赖于 Actor 、媒体路由器和 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 版本的 Actor 播放服务,它正在抓取 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 (*)
    

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

    关于android - Gradle 和 Google Cast 的 transient 依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33284641/

    相关文章:

    android - 单击 ListView 中的特定项目时,如何将 ListView 的选中项目框的颜色设置为绿色以外的其他颜色?

    android - 以编程方式将 RelativeLayout toRightOf 更改为 toLeftOf

    android - 如何动画隐藏 View 的过程?

    maven - Gradle中的Maven父POM依赖管理

    gradle - 将Gradle任务添加到多个组

    javascript - 具有依赖关系的 jQuery 插件

    svn - 是否将依赖项添加到存储库?

    android - 如何使用 Dagger 2 BindsOptionalOf

    gradle - 在 IDEA 中运行测试时,不是由 Gradle TestKit 创建的 plugin-under-test-metadata.properties

    dependencies - 使用 zypper 生成反向依赖项