【问题标题】:Google Play Services Cast 8.3.0 change Holo to Material DesignGoogle Play Services Cast 8.3.0 将 Holo 更改为 Material Design
【发布时间】:2015-11-23 16:16:58
【问题描述】:

我们仍在使用 Holo 主题,还没有准备好迁移到 Material Design。但是我们需要使用更新的 Play Services 8.3.0(或至少 7.8.0),所以我们需要在所有项目中增加版本。我们正在使用链接到我们其他应用程序的核心库项目。
问题是当我们增加 Play Services 的演员版本时

com.google.android.gms:play-services-cast:8.3.0

整个应用程序使用的 appcompat 库版本比我们声明的要新。如果不将其与播放服务库的演员部分相结合,一切仍然是 Holo 主题并使用较旧的 appcompat。 我们正在使用:

android.support.v7.app.ActionBarActivity
com.android.support:appcompat-v7:19.0.0
targetSdkVersion 18
compileSdkVersion = 23
buildToolsVersion = "23.0.0"

我们已经尝试降低以上版本号(compileSdk,...),但没有成功。我们还尝试通过以下方式从演员库中排除支持库:

compile ('com.google.android.gms:play-services-cast:8.3.0'){
    exclude group: 'com.android.support'
}

但同样没有成功地将它从我们的核心库项目传播到应用程序。

更新:来自gradlew -q :projectName:dependencies 我们仍在获取

+--- com.google.android.gms:play-services-cast:8.3.0
|    +--- com.google.android.gms:play-services-base:8.3.0 (*)
|    \--- com.android.support:mediarouter-v7:22.2.0
|         \--- com.android.support:appcompat-v7:22.2.0 (*)

对于 coreReleaseCompile / coreDebugCompile(和其他风格)变体(排除无效)。是否应该为库项目设置其他内容以真正排除较新的 appcompat?

有没有其他方法可以禁用将较新的 appcompat 与演员库一起使用?
谢谢。

【问题讨论】:

    标签: android-appcompat google-cast


    【解决方案1】:

    当使用依赖如:

    dependencies {
      compile 'com.android.support:appcompat-v7:19.0.0'
      compile ('com.google.android.gms:play-services-cast:8.3.0')
    }
    

    您可以运行 ./gradlew -q dependencies(或 ./gradlew -q :projectName:dependencies)来生成依赖关系报告。在这种情况下,我得到类似

    compile - Classpath for compiling the main sources.
    +--- com.android.support:appcompat-v7:19.0.0 -> 22.2.0
    |    \--- com.android.support:support-v4:22.2.0
    |         \--- com.android.support:support-annotations:22.2.0
    \--- com.google.android.gms:play-services-cast:8.3.0
         +--- com.google.android.gms:play-services-base:8.3.0
         |    \--- com.google.android.gms:play-services-basement:8.3.0
         |         \--- com.android.support:support-v4:22.2.0 (*)
         \--- com.android.support:mediarouter-v7:22.2.0
              \--- com.android.support:appcompat-v7:22.2.0 (*)
    

    由于 Google Play 服务依赖于支持库的 22.2.0 版本,您会看到该依赖项覆盖了您的 19.0.0 依赖项。

    将我的依赖替换为:

    dependencies {
      compile 'com.android.support:appcompat-v7:19.0.0'
      compile ('com.google.android.gms:play-services-cast:8.3.0') {
          exclude group: 'com.android.support'
      }
    }
    

    导致以下依赖:

    compile - Classpath for compiling the main sources.
    +--- com.android.support:appcompat-v7:19.0.0
    |    \--- com.android.support:support-v4:19.0.0
    \--- com.google.android.gms:play-services-cast:8.3.0
         \--- com.google.android.gms:play-services-base:8.3.0
              \--- com.google.android.gms:play-services-basement:8.3.0
    

    这表明支持库已被正确排除。当然,这当然可能意味着 Google Play 服务会崩溃(因为它可能期望 22.2.0 支持库中的方法)。

    除非您有另一个依赖项拉入较新版本的支持库,否则您可以使用旧版本的支持库进行编译。

    我会仔细检查您的依赖关系,以确保您实际上排除了支持库的较新版本,但要意识到版本 19.0.0 现在超过 2 年(2013 年 10 月发布),特别是通过排除依赖项来强制库使用旧版本的支持库更有可能导致崩溃。

    【讨论】:

    • 我完全同意你的观点,排除这些依赖项并不是一个好主意。如果它会崩溃,更新到 Material Desing 将是我们的首要任务。我还更新了问题 - exclude 不适用于我们的项目。任何其他想法为什么会发生这种情况?
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2016-11-21
    • 2016-03-17
    • 2014-02-27
    • 2018-08-17
    相关资源
    最近更新 更多