向Firebase添加android studio时,gradle不同步

问题描述 投票:3回答:2

因此,我尝试按照Firebase网站上的说明将Firebase SDK添加到我的Android Studio应用程序中(请参见图片)。

将行classpath 'com.google.gms:google-services:4.3.2'添加到项目级别gradle可以正常工作。我可以同步gradle文件。

但是,将apply plugin: 'com.google.gms.google-services'行添加到应用程序级别gradle文件中会破坏我的应用程序。我收到以下错误:

错误:清单合并失败:[com.android.support:support-compat:28.0.0]中的属性application @ appComponentFactory value =(android.support.v4.app.CoreComponentFactory)AndroidManifest.xml:22:18-91也存在于[androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value =(androidx.core.app.CoreComponentFactory)。建议:在AndroidManifest.xml:5:5-21:19的元素上添加'tools:replace =“ android:appComponentFactory”'以进行覆盖。

所以我去做建议。我将tools:replace="android:appComponentFactory"添加到AndroidManifest.xml文件中的> application [Namespace“ tools” not bound]错误。我按Alt + Enter进行修复,该修复将xmlns:tools="http://schemas.android.com/tools"添加到文件顶部。

再次尝试同步。现在,我得到一个类似的错误:错误:清单合并失败,出现多个错误,请参阅日志。这就是我迷路的地方。我不确定要在Google中搜索什么。搜索此特定错误会带来很多与我的问题无关的答案。这块领土对我来说是全新的。

P.S。最重要的是,在添加上述3行之后,build.grade(应用程序级别)文件中的implementation 'com.android.support:appcompat-v7:28.0.0'行以红色下划线显示。

我注意到还有其他与此相关的问题,但似乎没有一个可靠的答案。因此,我冒着可能将其转贴的风险。

编辑::这是我的Gradle授权。

Project Gradle

dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        classpath 'com.google.gms:google-services:4.3.2'
    }

App Gradle

dependencies {
    implementation 'com.google.firebase:firebase-analytics:17.2.0'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
}

编辑2 ::

迁移到androidx之后,我将所有导入语句更新为使用androidx。它仍然不断说合并失败并出现多个错误。我不得不删除以前建议添加的行tools:replace="android:appComponentFactory"。终于,我能够同步并运行我的应用程序了!除了现在,该应用程序只是启动和立即停止。我想那是进步。有任何想法吗?

编辑3 ::我终于得到它的工作。最后一个问题是RunTimeError“错误膨胀了类androidx.constraintlayout.ConstraintLayout。”这是因为我所有的xml文件都包含行androidx.constraintlayout.ConstraintLayout。用线androidx.constraintlayout.widget.ConstraintLayout代替了它,现在所有东西都变成肉汁了。 Gradle同步,应用程序加载,不会崩溃,并且一切都按预期运行]

任何帮助将不胜感激。提前谢谢,

弗拉德

enter image description here

android firebase gradle android-manifest
2个回答
1
投票

问题是您的应用程序正在使用android.support库,而您添加到项目中的Firebase SDK使用AndroidX

Note:AndroidX和android.support不兼容。

因此,您必须将项目迁移到AndroidX或使用Firebase的支持版本。

  1. 迁移代码以使用AndroidX

    • Refactor选项中选择迁移到Androidx
    • 同步项目,您应该没事。
  2. 使用非Androidx firebase。

    • 转到Firebase release notes
    • 找到将库迁移到AndroidX之前的最新版本(例如Firebase messaging 19使用androidx,而较低版本则不使用)

TL; DR

迁移到AndroidX或使用Firebase的较低版本的库。


0
投票

在您的应用程序标记中,添加工具:replace =“ android:appComponentFactory”

<application
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"
tools:replace="android:appComponentFactory"
>

然后gradle.properties添加

android.enableJetifier=true
android.useAndroidX=true
© www.soinside.com 2019 - 2024. All rights reserved.