web-dev-qa-db-fra.com

Pourquoi Android Studio force-t-il à utiliser Androidx depuis la bibliothèque de support Android?

Travailler sur un React projet natif mais soudainement il a cessé de fonctionner et a commencé à donner une erreur:

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:7:5-117 to override.

Je sais que Google a terminé la classe Support Library après le 28 et je sais comment migrer l'ensemble du projet de la classe Support Library vers la classe AndroidX.

Ma question est:

  • Existe-t-il un moyen possible de continuer à utiliser la classe Support Library plutôt que de passer à la classe AndroidX?

  • Comment résoudre ce problème?

16
Mohsin

Vous pouvez verrouiller vos versions de googleservices et firebase pour éviter androidX.

Dans Android/build.gradle, ajoutez:

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

OU dans gradle.properties ajoutez:

googlePlayServicesVersion=16.1.0
firebaseVersion=17.6.0
5
A-J-A

Publiez probablement votre fichier Gradle au niveau de l'application ici. Idéalement, si vous utilisez une autre dépendance qui est la dernière/mise à jour, vous obtiendrez cette erreur.

Si l'une des dépendances est la dernière/mise à jour, veuillez la rétrograder vers la version inférieure en vérifiant les journaux de modifications de son github. Pour moi, le coupable était la version stripe qui utilisait en interne l'androx et obtenait cette erreur. je l'ai déclassé et boum! C'est parti :)

Et désactivez également androidx de gradle.properties fichier utilisant

Android.useAndroidX=false
Android.enableJetifier=false

Ce qui oblige l'androx à être désactivé.

3
pramod_m

Selon Dan Lew

Les artefacts de la bibliothèque de support sont obsolètes et tous les développements futurs se feront dans AndroidX, il est donc impossible d'éviter cette migration. Espérons que ces conseils vous donneront un chemin de transition plus clair.

2
Wiguna R

Existe-t-il un moyen possible de continuer à utiliser la classe Support Library plutôt que de passer à la classe AndroidX?

Oui, c'est possible, mais vous pouvez uniquement reporter cet événement.
Vous ne pouvez pas l'éviter.

Les nouvelles bibliothèques Firebase et les nouvelles bibliothèques Google Play nécessitent androidx (consultez les listes ci-dessous)

Dans un court laps de temps, d'autres bibliothèques tiers utiliseront ces dépendances.

Comment résoudre ce problème?

Vous ne pouvez utiliser que les dernières versions de Firebase/Google Play Services/troisièmes bibliothèques qui fonctionnent avec les bibliothèques de support v.28 ou inférieures.

Voici la liste des bibliothèques de services Firebase et Google Play qui ont commencé à fonctionner avec la dépendance d'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

Bibliothèques de services de lecture:

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
2
Gabriele Mariotti

Vous mentionnez que vous utilisez React-Native. Comme mentionné ailleurs, vous ne pouvez pas éviter AndroidX pour toujours bien que vous puissiez le reporter.

Dans React-Native en particulier, il était difficile de convertir car Gradle ne jetifiait pas les fichiers source sauf pendant le refactor d'origine via Android Studio, et React-Native expédie son code natif sous forme de fichiers source.

Maintenant, vous pouvez simplement utiliser l'outil 'jetifier' , et après l'avoir installé et exécuté la première fois, ajoutez npx jetify dans la post-installation de votre package.json pour une jetification persistante entre les installations/mises à jour du module de nœud.

Ensuite, vous devriez pouvoir convertir avec succès votre application vers AndroidX, commencer en fonction des nouvelles versions de la bibliothèque AndroidX mais toujours utiliser des bibliothèques qui n'ont pas été converties. Vous serez mieux préparé pour réactif 0.60 natif qui sera AndroidX

Si vous devez reporter AndroidX et utilisez react-native, pour react-native 0.59 au moins, vous pouvez également utiliser l'outil jetifier à l'envers pour modifier les références source dans node_modules d'Androidx aux références compat.

2
Mike Hardy