Android-материал и appcompat Манифест слияние провалилось в реагировать родной или ExpoKit - PullRequest
34 голосов
/ 18 июня 2019

Я обновил 'android.support:appcompat-v7' до 28.0.0.

Но это принесло ошибку из сборки.

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:8:5-23:19 to override.

Тогда я получаю эту ошибку в Logcat:

Ошибка слияния манифеста

мой app.gradle:

  configurations.all {
    resolutionStrategy.force 'com.android.support:design:28.0.0'
    resolutionStrategy.force "com.android.support:support-v4:28.0.0"
    resolutionStrategy.force "com.android.support:support-media-compat:28.0.0"
  }
...
dependencies {
  implementation 'com.android.support:multidex:1.0.1'

  // Our dependencies
  implementation 'com.android.support:appcompat-v7:28.0.0'


  implementation 'com.android.support:appcompat-v7:28.0.0'
}

как мне это исправить?

Мне нужны ваши решения.

Заранее спасибо.

Ответы [ 13 ]

49 голосов
/ 18 июня 2019

Обновление 'react-native-device-info' до version 2.1.2 исправило ошибку для меня.См. github.com / facebook / Reaction-native / Issues / 25294.проблема.

13 голосов
/ 18 июня 2019

Основная причина связана с миграцией на Androidx, сервис Google Play обновлен до AndroidX Благодаря MR03web Эта проблема относится к реакционной-нативной информации об устройстве? лучший вариант - обновить react-native-device-info, используя

yarn upgrade react-native-device-info@2.1.2
cd android && gradlew clean
react-native run-android

или если вы не хотите обновляться, вы должны исключить com.google.android.gms из react-native-device-info, как это. Спасибо

implementation(project(":react-native-device-info"),  {
  exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-gcm:16.0.0"
7 голосов
/ 19 июня 2019

Добавьте следующее в ваш gradle.properties, затем очистите / перестройте

googlePlayServicesVersion=16.1.0
firebaseVersion=17.6.0
5 голосов
/ 18 июня 2019

Я нашел решение с помощью своего поиска, обратившись к ответу @MehulSolanki.

Я добавляю

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

в мой AndroidManifest.xml

и обновляю ком.android.tools.build:gradl:

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
  }

И добавьте это в свой файл gradle.properties

android.useAndroidX=true
android.enableJetifier=true

ОШИБКА: [TAG] Не удалось разрешить переменную '$ {animal.sniffer.version} '

ОШИБКА: [TAG] Не удалось разрешить переменную' $ {junit.version} '

В случае вышеуказанной ошибки

  1. File -> Invalidate Caches / restart
  2. Build -> Clean project

ошибка: пакет android.support.annotation не существует ошибка: не удается найти класс символовNullable

В случае вышеуказанной ошибки

Добавить implementation 'androidx.annotation:annotation:1.1.0'

изменить import android.support.annotation.Nullable; => androidx.annotation.Nullable;

изменить import android.support.annotation.NonNull;=> androidx.annotation.NonNull;

Версия компиляции и целевая версия должна быть 28.

4 голосов
/ 18 июня 2019

Понижение версии сервиса Google Play. В android/app/build.gradle изменить

compile 'com.google.android.gms:play-services-<service_name>:+'

до

compile 'com.google.android.gms:play-services-<service_name>:16.0.0'

Так что в моем случае было location. Но в другом случае это может быть любой другой сервис Google Play (как в списке здесь http://www.androiddocs.com/google/play-services/setup.html).

4 голосов
/ 18 июня 2019

Добавьте 'tools:replace="android:appComponentFactory"' в ваш AndroidManifest.xml внутри <application> тег

Ваш AndroidManifest.xml

<?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>

3 голосов
/ 18 июня 2019

Потратив целый день на эту проблему.Наконец, я решил эту проблему.

Я получил эту ошибку из библиотеки response-native-device-info и response-native-fast-image.Я просто удаляю эту библиотеку из файла package.json и затем устанавливаю

"response-native-device-info": "^ 2.1.2", "response-native-fast-image": "^ 6.0.3 " эта последняя версия

Я использовал ниже версию Gradle

classpath 'com.android.tools.build:gradle:3.3.1'

Я использовал ниже свойства версии

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

Я использовалниже версии

buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
2 голосов
/ 19 июня 2019

Этот ответ должен помочь большинству людей. Если это не помогло, то способ решить эту проблему (что не так уж и хорошо) - открыть проект Android в Android Studio. Это должно получить все файлы Gradle. С правой стороны вид должен быть андроид.

enter image description here

Отсюда просто проверьте каждый файл сборки Gradle на наличие знака + перед службами Google Play, Firebase или любой другой подобной библиотекой. Это также было объяснено в этом ответе.

После чего вы либо меняете его, как описано в ответе выше. вот так.

implementation(project(":react-native-admob"),  {
        exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-ads:16.0.0"

Или вы предоставляете переменную, если библиотека использует ее или, в крайнем случае, измените ее там сами.

Причина, по которой я изложил это здесь, заключается в том, что любой новичок, которому надоела эта ошибка, случайно появившаяся из ниоткуда внезапно, может решить ее эффективно и не ... умереть. лол.

2 голосов
/ 18 июня 2019

Согласно ответу @ Frank библиотека использовала services-gcm:+ в качестве зависимости, и последняя версия gcm вызвала эту проблему.

И я использовал :react-native-admob в своем проекте.Поэтому я просто изменяю следующие строки в android/app/build.gradle

From:

implementation project(':react-native-admob')

TO:

implementation(project(":react-native-admob"),  {
        exclude group: "com.google.android.gms"
})
implementation "com.google.android.gms:play-services-ads:16.0.0"
1 голос
/ 26 июня 2019

Сервисы Google Play ломают изменения.См. Примечания к выпуску .

. Простой способ решения этой проблемы - просто изменить версию сервисов Google Play.

Изменить все зависимости com.google.android.gms:play-services-* на версию16

...