添加 butterknife 库时清单合并失败

Manifest merger failed, when adding the butterknife library

dependencies {
    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

}

这些是依赖,在build.gradle

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory). Suggestion: add 'tools:replace="android:appComponentFactory"' to element at AndroidManifest.xml:7:5-21:19 to override.

我想在我的项目中添加一个库,它被称为 ButterKnife 库,在添加这个库之前项目很好,但是当我添加这个库时。发生清单合并失败错误。

我试过什么? 我将这些行添加到我的 AndroidManifest.xml:

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

但这产生了另一组错误

Caused by: com.android.tools.r8.utils.AbortException: Error: Static interface methods are only supported starting with Android N (--min-api 24): void butterknife.Unbinder.lambda$static[=14=]()

我尝试删除 butterknife 库,然后它构建得很好。

我也试过只添加其中一行:

tools:replace="android:appComponentFactory"

这没有做任何事情并产生了另一个错误:

Manifest merger failed with multiple errors, see logs

我尝试了 Refractor-> 迁移到 androidx, 这在 Java 文件中产生了一个新问题,现在说它 "cannot resolve symbol R"

所以我该怎么办,我正在学习一些应用程序开发在线课程。而教授这门课的人似乎没有这些错误。

com.jakewharton:butterknife:10.0.0 正在使用 AndroidX。检查一下 here.

但你也依赖com.android.support:appcompat-v7:28.0.0

您不应混合使用 AndroidX 和非 AndroidX 的依赖项。

你有两个选择:

  1. 使用较低版本的 ButterKnife。
  2. 迁移到 AndroidX。

要迁移到 AndroidX:

使用 androidx.appcompat:appcompat:1.0.0 而不是 com.android.support:appcompat-v7:28.0.0

将以下内容添加到您的 gradle.properties

android.useAndroidX=true
android.enableJetifier=true

将 Activity 的 AppCompatActivity 的导入更改为

import android.support.v7.app.AppCompatActivity;

import androidx.appcompat.app.AppCompatActivity;

查看迁移指南here

问题

我认为当前版本(最新)的 butterknife 有问题。对于这个问题,我找到的最简单的解决方案是更改 butterknife 适用的版本。

一种可能的解决方案

我改了这个

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

至此

   implementation 'com.jakewharton:butterknife:7.0.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:7.0.1'

为什么要这样做?

我们所做的是,我们现在将使用旧版本的 butterknife,该版本有效。

当我尝试将 butterknife 应用于我现有的一个应用程序时,我遇到了同样的问题。

您的 gradle 文件中没有任何 AndroidX 实现的应用程序

implementation 'com.jakewharton:butterknife:7.0.1'
annotationProcessor'com.jakewharton:butterknife-compiler:7.0.1'

这会很好用。

由于最新版本的 Butterknife 使用 AndroidX,您的项目也应该迁移到 AndroidX,如果您想要在现有项目上进行,这似乎是一项额外的工作。 如果是AndroidX实现的新项目那么你可以去最新版本:

implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'

如果您愿意将旧应用程序迁移到 AndroidX,请通过 link