Android Material和appcompat Manifest合并失败

Евг*_*сов 193 android build.gradle android-gradle-plugin gradle-plugin

我有下一个年级

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    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'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}
Run Code Online (Sandbox Code Playgroud)

但是当我想构建应用程序时,我会得到下一个日志:

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

好! 去清单并执行:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

然后我在Logcat中收到此错误:

Manifest merger failed with multiple errors, see logs that I have Linked with it
Run Code Online (Sandbox Code Playgroud)

Abi*_*san 390

我有类似的问题.在gradle.properties文件中添加了两行:

android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)

这两行自动解决了我的谷歌文件和第三方依赖项之间的依赖冲突.这是以下链接:https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project

  • 这应该是公认的答案。这样就解决了问题。 (7认同)
  • android.useAndroidX = true (5认同)
  • 添加后,将发生以下错误```*出了什么问题:任务':react-native-camera:compileGeneralDebugJavaWithJavac'的执行失败。&gt;编译失败;有关详细信息,请参见编译器错误输出。*尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。与--scan一起运行以获取完整的见解。``` (5认同)
  • “但我没有看到‘gradles.properties 文件’”!是的,因此在 studio project 的应用程序根文件夹中,创建该文件(无扩展名)并添加这些行。 (2认同)

Met*_*ete 132

当我尝试将Kotlin-KTX库添加到我的项目时,我遇到了同样的错误.

我尝试AndroidX迁移,并修复了问题!

重构/迁移到AndroidX


Khe*_*raj 93

失败的原因

您正在使用属于AndroidX的材料库.如果您不了解AndroidX,请仔细阅读此答案.

一个应用程序应该使用AndroidX或旧的Android支持库.这就是你遇到这个问题的原因.

例如 -

在您的gradle中,您正在使用

  • com.android.support:appcompat-v7 (部分旧版--Android支持库 - )
  • com.google.android.material:material(AndroidX的一部分)(AndroidX构建工件com.android.support:design)

所以解决方案是使用AndroidX或旧的支持库.我建议使用AndroidX,因为Android不会在版本28.0.0之后更新支持库.请参阅支持库的发行说明.

只需迁移到AndroidX即可.以下是我迁移到AndroidX的详细解答.我在这里从这个答案中得到了必要的步骤.

在迁移之前,强烈建议您备份项目.

现有项目

  • Android Studio>重构菜单>迁移到AndroidX ...
  • 它将分析并打开底部的Refractor窗口.接受要完成的更改.

图片

新项目

把这些标志放在你的 gradle.properties

android.enableJetifier=true
android.useAndroidX=true
Run Code Online (Sandbox Code Playgroud)

检查@ Library映射是否具有相同的AndroidX包.

检查迁移到AndroidX的 @ Official页面

什么是Jetifier?

  • 请记住,单击“迁移到AndroidX”后,单击左下方的“执行重构” (2认同)

小智 79

就我而言,这是完美的工作..我在清单文件中添加了以下两行代码

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Run Code Online (Sandbox Code Playgroud)

幸得这个答案

清单文件示例

  • 我不知道以后我的应用程序是否会出现问题,但它奏效了! (4认同)
  • 是的,我遇到了一个问题:**使用操作系统独立路径'META-INF / androidx.core_core.version找到了多个文件** (2认同)
  • 然后我得到一个错误,指出工具未绑定到应用程序标签。 (2认同)

E J*_*nga 29

简单的解决方案-迁移到AndroidX

在中gradle.properties,只需在下面添加两个脚本

android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)

是什么原因?

AndroidX中的所有程序包都位于以字符串androidx开头的一致名称空间中。支持库包已映射到相应的androidx。*包中。有关所有旧类和构建构件到新构件的完整映射,请参见Package Refactoring页面。

请参阅“软件包重构”页面


Anu*_*pta 16

只需将依赖项内的第一行和最后一行中的"rc01"更改为"alpha1"这对我有用

  • 我没有在实现“ com.android.support:appcompat-v7:28.0.0”中编写“ rc01”。仍然有问题。请提出一些解决方案。 (32认同)
  • 这个答案应该是对该问题的评论。 (5认同)

mug*_*hil 13

从Android P开始,支持库已移至AndroidX

从此页面为您的libs做一个重构.

https://developer.android.com/topic/libraries/support-library/refactor


Arf*_*leb 12

只需删除android.support依赖项

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
Run Code Online (Sandbox Code Playgroud)

引自材料指南

如果您还不想切换到新的androidx和com.google.android.material包,可以通过com.android.support:design:28.0.0-alpha3依赖项使用Material Components.

注意:您不应同时在应用中使用com.android.support和com.google.android.dependencies.

只是删除此依赖项工作正常

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
Run Code Online (Sandbox Code Playgroud)

这是完整的依赖示例

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       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'
   }
Run Code Online (Sandbox Code Playgroud)


Man*_*wis 7

只需将这两行代码添加到清单文件中

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Run Code Online (Sandbox Code Playgroud)


Pra*_*ind 7

在Android AndroidManifest.xml中查看此图像并添加此行

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Blo*_*oss 6

跟着这些步骤:

  • 转到“重构”,然后单击“迁移到AndroidX”
  • 单击执行重构


Has*_*ter 6

这个问题主要发生在旧的依赖关系上

有2个解决方案:

第一:

从文件更新所有old dependencies和类路径Project level gradle

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'
Run Code Online (Sandbox Code Playgroud)

第二个:

你的项目 Migrate to AndroidX

从 Android Studio 菜单 -> Refanctor -> Migrate to AndroidX

谢谢,如果有人从这个答案中得到帮助,请告诉我。


Man*_*wis 6

最后,通过在android/build.gradle文件中添加两行找到了一种快速简便的解决方案。

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"
Run Code Online (Sandbox Code Playgroud)

请遵循此100%正确的规定。

  • @ManojAlwis我们需要在build.gradle文件的哪个部分放置它? (2认同)

Aja*_*jay 6

将这些行添加到AndroidManifest.xml文件中。

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"
Run Code Online (Sandbox Code Playgroud)


Kas*_*med 6

所有关于库版本兼容性的信息

我两个小时就遇到了这个奇怪的错误。我通过执行以下步骤解决了该错误

将您的build.gradle依赖项挂起

  implementation 'com.google.android.gms:play-services-maps:17.0.0'
Run Code Online (Sandbox Code Playgroud)

  implementation 'com.google.android.gms:play-services-maps:15.0.0'
Run Code Online (Sandbox Code Playgroud)


Sur*_*nav 5

仅当您不想使用androidx时

因此,在我的情况下,我使用的是使用androidx的库,但我没有使用androidx,因此当我将该库版本降级时,问题已解决。

就我而言:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'
Run Code Online (Sandbox Code Playgroud)

上面提到的库导致问题13. +将使用androidx自动获取库的新版本。所以我将库版本降级为:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'
Run Code Online (Sandbox Code Playgroud)

问题解决了。


d4r*_*con 5

我所做的只是转到顶部菜单上的“重构”选项。

然后选择“迁移到AndroidX”

接受以将项目另存为 zip 文件。

请更新 Android Studio 和 Gradle 以确保不会遇到问题。


小智 5

  1. 请转到重构->迁移->迁移到AndroidX。

  2. 请将其添加到gradle.properties文件中:android.enableJetifier = true android.useAndroidX = true

并执行同步。

  • 对此要非常小心。它将影响整个文件树。我当时在一个真实的代码区域工作,几乎重构了数百个文件。在执行此操作之前,将项目隔离在其自己的路径中。还要注意,如果您使用片段,它会将片段导入更改为: import androidx.fragment.app.Fragment; 可怕非常可怕 (2认同)

小智 5

如果现有项目,请迁移到androidX。如果是新项目,请将这两个标志添加到Gradle.propeties

android.enableJetifier = true
android.useAndroidX = true

有关更多详细信息,请访问https://developer.android.com/jetpack/androidx 或查看“ 什么是AndroidX”


归档时间:

查看次数:

289884 次

最近记录:

6 年,1 月 前