Android 使用 Android Studio 2.3 支持 Repo 46.0.0

Android Support Repo 46.0.0 with Android Studio 2.3

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

我去下面的错误:

Error:Execution failed for task ':app:processDevDebugManifest'.

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.0) from [com.android.support:support-v13:25.3.0] AndroidManifest.xml:27:9-31 is also present at [com.android.support:preference-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1). Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:25:5-27:34 to override.

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

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

关于迁移到新的 android O,那就是 link: 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 支持库的 "X or newer" 版本,因此 Gradle 依赖项解析会获取最新的可用版本,而忽略您实际上在 [=12] 中指定的精确版本=]块。

这不是你想要的。您希望所有具有相同版本的支持库和主要版本必须匹配编译 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 ,

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

这旨在完全避免该问题。

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

<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'
            }
        }
    }
}

他们的解决方案是:

  1. 移至项目资源管理器视图
  2. 深入了解他们的外部图书馆
  3. 查看哪个库正在使用 26.0.0-alpha6
  4. 现在在第3步的库的基础上app.gradle写这个

例如。就我而言:

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

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

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

为此,请打开此 link(将版本更改为适合您需要的任何版本)

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

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

仅此而已:-

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

这里 v7:25.3.1 是我当前的版本,你刚刚把你的。

在应用程序中 gradle 文件

步骤 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

在应用程序模块 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 库已更新且兼容以避免运行时错误。

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

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'

希望能帮到你,祝你好运