添加 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 的依赖项。
你有两个选择:
- 使用较低版本的 ButterKnife。
- 迁移到 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。
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 的依赖项。
你有两个选择:
- 使用较低版本的 ButterKnife。
- 迁移到 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。