Android X:tools:replace在属性行指定:但未指定新值


69

我已经在该网站上尝试了许多解决方案,但是仍然无法解决问题。该问题归因于Android X库。当我添加Android X时,此问题已解决,但打开了新问题。如何解决这个问题?

较早出现此错误:

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 <application> element at AndroidManifest.xml:19:5-142:19 to override.

添加完后tools:replace="android:appComponentFactory",出现此错误:

 java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
at com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.java:540)    
at com.android.build.gradle.tasks.MergeManifests.doFullTaskAction(MergeManifests.java:173)

合并错误(在Android清单中):

错误:在属性:android:appComponentFactory的第2行指定了tools:replace,但未在应用主清单(此文件)的第1行中指定新值

表现:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.example"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:replace="allowBackup, android:appComponentFactory"
    android:allowBackup="false">

    ...

    <application
        android:name="com.example"
        android:icon="@mipmap/icon"
        android:debuggable="true"
        android:hardwareAccelerated="false"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:allowBackup="false"
        tools:ignore="GoogleAppIndexingWarning,HardcodedDebugMode">
       ...

您是否检查过以下答案:stackoverflow.com/a/54825603/1318946
Pratik Butani,

3
您有没有机会使用Firebase?如果是,则最新版本在android X上,因此会出现错误
griffins

@Ggriffo不,我没有使用Firebase。
Malwinder Singh,

当我的项目未迁移到androidX时,我遇到了此错误,我尝试同步CameraX库。迁移后,一切正常。
Bhriguraj Salponia

Answers:


87

我认为您正在迁移到AndroidX库。

将以下行添加到gradle.properties文件

android.useAndroidX=true
android.enableJetifier=true

tools:replace="android:appComponentFactory"从清单中删除。

替换android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity

迁移到AndroidX


6
我应该在哪里替换android.support.v7.app.AppCompatActivity?
Lucky_girl

@Lucky_girl您必须使用android.support.v7.app.AppCompatActivity。这意味着您必须为此活动创建了子活动。将其替换为androidx.appcompat.app.AppCompatActivity
Malwinder Singh,

我做了同样的事情,但是得到了这个错误:Manifest merger failed : Attribute application@appComponentFactory value=(whateverString) from AndroidManifest.xml:26:9-53 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 <application> element at AndroidManifest.xml:23:5-149:19 to override.
Ali Akram

如果未为AndroidX配置的应用程序使用实际上使用AndroidX的库,则会发生@AliAkram。您应该做的是查看库的发行历史,并查看在该库切换到AndroidX之前是否有发行。最后,为您自己编写一个工作项,以将您的应用程序转换为AndroidX-根据项目的大小,这可能需要花费相当长的时间。
某处某人


13

我在项目中遇到了同样的错误,我已经解决了您可以尝试

Android Studio>重构>迁移到AndroidX

在此处输入图片说明


2
不,它会自动修复所有进口商品
F0r3v3r-A-N00b

6

就我而言,我已经更新了Firebase和play服务依赖项,导致出现此问题。

恢复依赖更新,错误消失

似乎最新的Firebase和Play Service依赖项与androidx兼容。


5

经常发生这种情况是因为您同时使用了Androidx库支持库。某些第三方库可能包含支持库,而其他第三方库可能包含Androidx库,这也可能导致此问题。如果您的PC中有gradle环境,请尝试在Android Studio终端中使用“ gradlew:app:dependencies”命令,该命令将列出所有库,包括项目的第3方库,并查看使用哪个库或框架的Androidx库以及不。然后尝试升级使用支持库的旧库,此问题应消失。


4

我在<application>标记内的行下方添加了

tools:replace="android:appComponentFactory" android:appComponentFactory="android.support.v4.app.CoreComponentFactory"

gradle.properties文件内的行下方

android.useAndroidX=true android.enableJetifier=true

重建您的项目。


3

迁移到android x

在标签内添加以下行

    tools:replace="android:appComponentFactory"
    android:appComponentFactory="android.support.v4.app.CoreComponentFactory"

然后还在gradle.properties文件中添加以下行

  android.useAndroidX=true
  android.enableJetifier=true

重建您的项目。


2

就我而言,由于使用的Firebase版本,我遇到了问题。降级Firebase版本对我有所帮助。

实现'com.crashlytics.sdk.android:crashlytics:2.10.1'实现'com.google.firebase:firebase-core:16.0.6'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.