Почему Android Studio заставляет использовать Androidx из библиотеки поддержки Android? - программирование

Почему Android Studio заставляет использовать Androidx из библиотеки поддержки Android?

Работал над проектом React Native, но внезапно перестал работать и начал выдавать ошибку:

Manifest merger failed : Attribute [email protected] 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:7:5-117 to override.

Я знаю, что Google справился с классом библиотеки поддержки после 28, и я знаю, как перенести весь проект из класса библиотеки поддержки в класс AndroidX.

Мой вопрос:

  • Есть ли какой-нибудь возможный способ продолжать использовать класс Support Library, а не переходить на класс AndroidX?

  • Как исправить эту проблему?

4b9b3361

Ответ 1

Вы можете заблокировать свои googleservices и версии firebase, чтобы избежать androidX.

В android/build.gradle добавьте:

buildscript {
  ...
  ext {
    // Lock down googlePlayServicesVersion
    googlePlayServicesVersion = "16.1.0"
    firebaseVersion = "17.6.0"
  }
}

ИЛИ в gradle.properties добавить:

googlePlayServicesVersion=16.1.0
firebaseVersion=17.6.0

Ответ 2

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

Если какая-либо из зависимостей является самой последней/обновленной, пожалуйста, понизьте ее до более низкой версии, не просматривая журналы изменений из этого github. Для меня виновником была полосовая версия, которая внутренне использовала androidx и получала эту ошибку. я понизил это и бум! Прошло :)

А также отключите androidx из файла gradle.properties используя

android.useAndroidX=false
android.enableJetifier=false

Что заставляет андроида быть отключенным.

Ответ 3

По словам Дэна Лью

Артефакты библиотеки поддержки устарели, и вся дальнейшая разработка будет осуществляться в AndroidX, поэтому избежать этой миграции не избежать. Надеюсь, однако, эти советы дадут вам более четкий путь перехода.

Ответ 4

  Есть ли какой-нибудь возможный способ продолжать использовать класс библиотеки поддержки, а не переходить на класс AndroidX?

Да, это возможно, но вы можете только отложить это событие.
Вы не можете избежать этого.

Для новых библиотек Firebase и новых библиотек Google Play требуетсяandroidx (см. списки ниже)

В скором времени другие третьи библиотеки будут использовать эти зависимости.

Как решить эту проблему?

Вы можете использовать только последние версии Firebase/Google Play Services/третьих библиотек, которые работают с библиотеками поддержки v.28 или ниже.

Вот список библиотек сервисов Firebase и Google Play, которые начали работать с зависимостью androidx.

Firebase:

Ads version 18.0.0
Analytics version 17.0.0
App Indexing version 19.0.0
Authentication version 18.0.0
Cloud Firestore version 20.0.0
Cloud Firestore-ktx version 20.0.0
Cloud Functions (client) version 18.0.0
Cloud Messaging version 19.0.0
Cloud Storage version 18.0.0
Dynamic Links version 18.0.0
In-App Messaging version 18.0.0
In-App Messaging Display version 18.0.0
Instance IDs version 19.0.0
ML Kit Common version 20.0.0
ML Kit Vision version 21.0.0
ML Kit Image Labeling Model version 18.0.0
ML Kit Face Detection Model version 18.0.0
ML Kit Object Detection and Tracking Model version 17.0.0
ML Kit Vision AutoML version 17.0.0
ML Kit Natural Language version 20.0.0
ML Kit Language Identification Model version 20.0.0
ML Kit Smart Reply Model version 20.0.0
ML Kit Translate Model version 20.0.0
ML Kit Model Interpreter version 20.0.0
Realtime Database version 18.0.0
Performance Monitoring version 18.0.0
Remote Config version 18.0.0
A/B Testing version 18.0.0

Библиотеки сервисов воспроизведения:

com.google.android.datatransport:transport-api:2.0.0
com.google.android.datatransport:transport-backend-cct:2.0.0
com.google.android.datatransport:transport-runtime:2.0.0
com.google.android.gms:play-services-ads:18.0.0
com.google.android.gms:play-services-ads-identifier:17.0.0
com.google.android.gms:play-services-ads-lite:18.0.0
com.google.android.gms:play-services-afs-native:17.0.0
com.google.android.gms:play-services-analytics:17.0.0
com.google.android.gms:play-services-analytics-impl:17.0.0
com.google.android.gms:play-services-appinvite:18.0.0
com.google.android.gms:play-services-audience:17.0.0
com.google.android.gms:play-services-auth:17.0.0
com.google.android.gms:play-services-auth-api-phone:17.0.0
com.google.android.gms:play-services-awareness:17.0.0
com.google.android.gms:play-services-base:17.0.0
com.google.android.gms:play-services-basement:17.0.0
com.google.android.gms:play-services-cast:17.0.0
com.google.android.gms:play-services-cast-framework:17.0.0
com.google.android.gms:play-services-clearcut:17.0.0
com.google.android.gms:play-services-cronet:17.0.0
com.google.android.gms:play-services-drive:17.0.0
com.google.android.gms:play-services-fido:18.0.0
com.google.android.gms:play-services-fitness:17.0.0
com.google.android.gms:play-services-flags:17.0.0
com.google.android.gms:play-services-games:18.0.0
com.google.android.gms:play-services-gass:18.0.0
com.google.android.gms:play-services-gcm:17.0.0
com.google.android.gms:play-services-identity:17.0.0
com.google.android.gms:play-services-iid:17.0.0
com.google.android.gms:play-services-instantapps:17.0.0
com.google.android.gms:play-services-location:17.0.0
com.google.android.gms:play-services-maps:17.0.0
com.google.android.gms:play-services-measurement:17.0.0
com.google.android.gms:play-services-measurement-api:17.0.0
com.google.android.gms:play-services-measurement-impl:17.0.0
com.google.android.gms:play-services-measurement-sdk:17.0.0
com.google.android.gms:play-services-measurement-sdk-api:17.0.0
com.google.android.gms:play-services-nearby:17.0.0
com.google.android.gms:play-services-oss-licenses:17.0.0
com.google.android.gms:play-services-panorama:17.0.0
com.google.android.gms:play-services-phenotype:17.0.0
com.google.android.gms:play-services-places:17.0.0
com.google.android.gms:play-services-places-placereport:17.0.0
com.google.android.gms:play-services-plus:17.0.0
com.google.android.gms:play-services-safetynet:17.0.0
com.google.android.gms:play-services-stats:17.0.0
com.google.android.gms:play-services-tagmanager:17.0.0
com.google.android.gms:play-services-tagmanager-api:17.0.0
com.google.android.gms:play-services-tagmanager-v4-impl:17.0.0
com.google.android.gms:play-services-tasks:17.0.0
com.google.android.gms:play-services-vision:18.0.0
com.google.android.gms:play-services-vision-common:18.0.0
com.google.android.gms:play-services-vision-image-label:18.0.0
com.google.android.gms:play-services-wallet:17.0.0
com.google.android.gms:play-services-wearable:17.0.0

Ответ 5

Вы упоминаете, что используете реакционную систему. Как уже упоминалось в другом месте, вы не можете избежать AndroidX навсегда, хотя вы можете отложить его.

В частности, в реактивном родстве было трудно конвертировать, потому что gradle не создает исходные файлы, кроме как во время первоначального рефакторинга через Android Studio, и реактивный натив доставляет свой собственный код в виде исходных файлов.

Теперь вы можете просто использовать утилиту 'jetifier', и после ее установки и первого npx jetify добавьте npx jetify в postinstall вашего package.json для постоянного джитификации во время установки/обновления модуля узла.

Тогда вы сможете успешно конвертировать ваше приложение в AndroidX, начните в зависимости от новых версий библиотек AndroidX, но все еще используйте библиотеки, которые не были конвертированы. Вы будете лучше подготовлены к реакции-родной 0,60, который будет AndroidX

Если вам нужно отложить AndroidX и использовать реактивную версию, по крайней мере, для реактивной версии версии 0.59, вы также можете использовать инструмент jetifier в обратном порядке для изменения ссылок на источник в node_modules из androidx на ссылки на компат.