【问题标题】:Android Support Repo 46.0.0 with Android Studio 2.3Android 支持 Repo 46.0.0 和 Android Studio 2.3
【发布时间】:2017-03-22 11:11:13
【问题描述】:

当 Android Studio 通知弹出时,我今天将我的支持存储库更新到 46.0.0。

我出现以下错误:

错误:任务 ':app:processDevDebugManifest' 执行失败。

清单合并失败:属性 meta-data#android.support.VERSION@value value=(25.3.0) 来自 [com.android.support:support-v13:25.3.0] AndroidManifest.xml:27:9-31 也出现在 [com.android.support:preference-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 值=(26.0.0-alpha1)。建议:加 'tools:replace="android:value"' 到元素 AndroidManifest.xml:25:5-27:34 覆盖。

我更新了所有依赖项以使用 25.3.0 中的 Revision 26.0.0 Alpha 1,但事实证明我需要将 compileSdk 从 25 提高到 26。 如果您有 AS 2.3,则无法这样做,您需要从 canary 获取不稳定的 alpha/beta 版本。

此链接显示更改: https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0-alpha1

关于迁移到新的 android O,这就是链接: https://developer.android.com/preview/migration.html

似乎使用 AS 稳定版本不适用于新的存储库。

如何返回到 Android Studio 存储库版本 45 而不是新的 46?

** 更新:合并的清单显示生成的库清单之一包含

<meta-data
        android:name="android.support.VERSION"
        android:value="26.0.0-alpha1" />

但由于它是生成的文件,因此编辑是无用的,这就是为什么现在我会坚持使用 rev 45 直到新 AS 处于稳定构建状态

【问题讨论】:

  • 在这里查看我对 android 'O' gradle 配置的回答。 stackoverflow.com/questions/42949170/…
  • @Wizard 它在 AS 2.3 上不起作用,因为我无法下载最新平台:错误:无法在 **\AppData\Local 中找到带有哈希字符串“android-O”的目标\Android\sdk 安装缺少的平台并同步项目
  • 好的 - 将您的频道切换到金丝雀。
  • 这是显而易见的答案,但有些公司喜欢在稳定版本上工作。推送一个破坏我们工作平台的更新是一个非常糟糕的举动,特别是当我们有一个产品我们不想移动到版本 O 因为它已经发布时。我猜是时候重新安装旧的 AS 版本了
  • 哇..等等! Android O 尚未发布。发布版本为O preview。您是否阅读了我回答中的脚注?

标签: android android-studio android-support-library


【解决方案1】:

有什么问题

一些库依赖于 Android 支持库的“X 或更新”版本,因此 Gradle 依赖解析会抓取最新可用的内容,而忽略您实际上在 dependencies 块中指定的精确版本。

这不是你想要的。您希望所有具有相同版本的支持库和主版本必须匹配编译 SDK 版本。

解决办法是什么

幸运的是,您可以强制使用特定的支持库版本。

把它放在你的应用模块的末尾 build.gradle:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            // Skip multidex because it follows a different versioning pattern.
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.0'
            }
        }
    }
}

当然用你正在使用的版本替换它。

dependecies 块中支持库的版本值现在无关紧要。

如果您有疑问

这是well documented method,它正在工作。

你能帮上什么忙

查找支持库版本depend on a range的库

gradlew dependencies --configuration compile -p <module name> | grep ,

并让上述库的作者知道他们应该过渡地依赖他们的库可以使用的最古老的支持库

这旨在完全避免这个问题。

【讨论】:

  • 1 周后解决了我的头痛问题。不错!
  • 在 build.gradle 中,Android 的 DependencyResolveDetails “无法解析符号”。仅在 Android Studio 2.3.2、Gradle 版本 3.3、Gradle 插件 2.3.2 中发生。有什么想法吗?
  • @Baker 删除 DependencyResolveDetails 并重试。 Groovy(语言)是动态类型的,因此不需要类型声明。
  • 很好的解决方案。
  • 这么多晦涩的“找不到资源”-esque 错误,没有 Google 搜索结果......这一切都归结为 Android 支持库版本差异的混合和匹配。我浪费了多少小时试图弄清楚这个问题......如果我能 +1000 你的答案,我会的!
【解决方案2】:

第 1 步

要避免 Gradle 检查不兼容的com.android.support 版本,一个快速解决方法是在应用模块build.gradle 中添加以下代码。

dependencies {
    //noinspection GradleCompatible
}

这是一个临时修复,不能解决根本问题!它有助于以最少的修改继续开发您的应用程序。

第 2 步

将此添加到主清单文件AndroidManifest.xml

<meta-data
    tools:replace="android:value"
    android:name="android.support.VERSION"
    android:value="25.3.1" />

当支持存储库的下一个更新可用时,此条目将被删除。

第 3 步

在app模块build.gradle文件末尾添加如下代码:

configurations.all {
    resolutionStrategy.eachDependency { details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.1'
            }
        }
    }
}

注意:建议确保您的 Gradle 库已更新且兼容以避免运行时错误。

【讨论】:

  • 第 3 步使第 2 步过时。第 1 步仅影响 IDE 提示,对编译没有任何作用。这给我们留下了我自己答案的核心,来吧,伙计......
【解决方案3】:

他们是解决这个问题的解决方案:

  1. 移至项目浏览器视图
  2. 最底层的是外部库
  3. 查看哪个库正在使用 26.0.0-alpha6
  4. 现在在第三步的库的基础上写在app.gradle中

例如。就我而言:

configurations.all {
    resolutionStrategy.force 'com.android.support:appcompat-v7:25.3.0'
    resolutionStrategy.force 'com.android.support:support-v13:25.3.0'
}

这将强制项目使用提到的库。

【讨论】:

  • 假设另一个库依赖于support-v4:[24.0.0,)。强制 appcompat-v7 到特定版本是否也会强制使用相同版本的 support-v4,因为 appcompat-v7 依赖于它?还是我必须单独指定每个工件(考虑到 support-v4 拆分为多个工件,这将是一件很痛苦的事情)?
  • @EugenPechanec ,lint 始终会生成警告,您必须使用相同的依赖项以避免运行时冲突/错误,因此它是解决问题的临时解决方案。
  • @RajeshTiwairi 该错误是由清单合并产生的。 Lint 是一个检查 android 源和资源的工具。这不是关于 Lint,我的问题是关于 Gradle。
【解决方案4】:

我认为最好的解决方案是将 Android 支持库恢复到版本 45。

为此,请打开此链接(将版本更改为适合您需要的版本)

https://dl-ssl.google.com/android/repository/android_m2repository_r45.zip

下载后,解压并将 m2repository 复制到 android-sdk-root-folder\extras\android。确保在解压缩之前删除现有的 m2repository 以避免出现问题。

【讨论】:

    【解决方案5】:

    这是一个临时修复,不能解决根本问题!它帮助我以最少的修改继续开发软件。只需将其添加到主清单:

    <meta-data
        tools:replace="android:value"
        android:name="android.support.VERSION"
        android:value="25.3.0" />
    

    此条目有望在支持存储库的下一次更新中再次删除。

    解决方案: 通过将以下内容添加到我的 10 个 build.gradle 文件中的 4 个,标记的解决方案对我有用:

    configurations.all {
        resolutionStrategy.eachDependency { details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '25.3.0'
                }
            }
        }
    }
    

    【讨论】:

    • 不会改变已导入支持库版本 26 的事实。你只是掩盖了问题,它最终会咬你。
    • @EugenPechanec 您的解决方案对我不起作用:无法解析符号“DependencyResolveDetails”。我错过了什么?
    • 如果您对我的回答有疑问,为什么不评论我的回答? Groovy(用 build.gradle 编写的语言)是动态类型的。删除“DependencyResolveDetails”并重试。如果这不起作用,请留下另一条评论。
    • @EugenPechanec 我是新用户,我没有足够的声誉(现在可能低于 0)来评论您的答案。你的建议对我不起作用。我收到与没有相同的错误消息。我暂时坚持我的修复。现在没有时间重新安装。仍然无法理解反对票。也许我没有足够准确地描述修复背后的动机。
    • 我明白了,事情是这样的:你的“修复”并不能解决任何问题。您导入支持库 v25.3.0 的某些部分和 v26.0.0-alpha1 的某些部分。该错误让您知道存在冲突。您只是关闭了错误,但冲突仍然存在,您可能(可能会)遇到运行时错误。因此,让我们尝试其他方法:使用 Gradle 3.4.1(在 gradle/gradle-wrapper.properties 中)和 Android 构建插件 2.3.0(在根项目 build.gradle 中),如果这不起作用,请再次联系我。 确保将代码放在 app 模块 build.gradle 的末尾。
    【解决方案6】:

    只需这样做即可:-

    编译'com.android.support:appcompat-v7:25.3.1'

    这里的 v7:25.3.1 是你刚刚放 urs 的我当前的版本。

    在应用程序的 gradle 文件中

    【讨论】:

      【解决方案7】:

      对我来说问题是这里的版本不一样

      implementation 'com.android.support:appcompat-v7:**26.0.0-beta1**'
      implementation 'com.android.support:support-v4:**26.0.0-beta1**'
      implementation 'com.android.support:design:**26.0.0-beta1**'
      

      卡片视图是

      compile 'com.android.support:cardview-v7:26.1.0'
      

      所以我将版本库更改为..

      implementation 'com.android.support:appcompat-v7:26.1.0'
      implementation 'com.android.support:support-v4:26.1.0'
      implementation 'com.android.support:design:26.1.0'
      

      希望对你有所帮助,祝你好运

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-25
        • 2017-04-29
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-19
        • 1970-01-01
        相关资源
        最近更新 更多