Gradle не синхронизируется при добавлении FireBase в Android Studio - PullRequest
4 голосов
/ 10 ноября 2019

Поэтому я пытаюсь добавить Firebase SDK в свое приложение Android Studio в соответствии с инструкциями с веб-сайта Firebase (см. Рисунок).

Добавление строки classpath 'com.google.gms:google-services:4.3.2' на уровне проекта Gradle работает нормально. Я могу синхронизировать файлы gradle.

Однако добавление строки apply plugin: 'com.google.gms.google-services' в файл gradle уровня приложения разрушает мое приложение. Я получаю следующее сообщение об ошибке:

ОШИБКА: сбой слияния] AndroidManifest.xml: 22: 18-91 также присутствует в [androidx.core: core: 1.0.0] AndroidManifest.xml: 22: 18-86 value = (androidx.core.app.CoreComponentFactory). Предложение: добавьте 'tools: replace = "android: appComponentFactory"' к элементу на AndroidManifest.xml: 5: 5-21: 19, чтобы переопределить.

Так что я пойду, чтобы сделать предложение. Я добавляю tools:replace="android:appComponentFactory" в> application <элемент в файле AndroidManifest.xml. Это тогда дает мне <em>Пространство имен "инструменты", не связанное ошибка. Я нажимаю Alt + Enter, чтобы исправить, что добавляет xmlns:tools="http://schemas.android.com/tools" в начало моего файла.

Попробуйте синхронизировать снова. Теперь я получаю похожую ошибку: ОШИБКА: сбой манифеста с множественными ошибками, см. Журналы . И это где я потерян. Я не уверен, что искать в Google. поиск этой конкретной ошибки вызывает много ответов, не связанных с моей проблемой. Эта территория совершенно новая для меня.

PS Кроме того, строка implementation 'com.android.support:appcompat-v7:28.0.0' внутри моего файла build.grade (уровень приложения) подчеркнута красным после добавления ранее упомянутых 3 строк.

Я заметил, что есть другие вопросы, связанные с этим, но ни на один, похоже, нет четких ответов. Поэтому я рискую, что это может быть репост.

РЕДАКТИРОВАТЬ :: Вот мои зависимости gradle.

Project Gradle

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

Приложение 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

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Проблема в том, что ваше приложение использует библиотеки android.support, в то время как Firebase SDK, добавленный в проект, использует AndroidX.

Примечание : AndroidX и android.support не совместимы.

Таким образом, вам нужно либо перенести проект на AndroidX, либо использовать версию поддержки Firebase.

  1. Перенос кода для использования AndroidX

    • Из Refactor выберите вариант Миграция на Androidx .
    • Синхронизируйте проект, и все будет в порядке.
  2. Используйте не-Androidx firebase.

    • Перейти к Примечания к выпуску Firebase
    • Найти последнюю версию, предшествующую миграции библиотеки на AndroidX
      (Например, Firebase messaging19 использует androidx, а более низкие версии этого не делают)

TL; DR

Миграция на AndroidX или использование более низкой версиибиблиотека Firebase.

0 голосов
/ 10 ноября 2019

В тэге приложения добавьте инструменты: 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
...