J'ai rencontré un problème avec l'intégration de Firebase. Tout d'abord, j'ai ajouté des règles au fichier build.gradle
au niveau racine:
buildscript {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.1.2'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
maven { url "http://dl.bintray.com/populov/maven" }
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Et le module Gradle file:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 24
buildToolsVersion "24"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 14
targetSdkVersion 24
versionCode 2
versionName "0.9"
}
buildTypes {
///
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.firebase:firebase-core:9.0.2'
compile 'com.google.firebase:firebase-crash:9.0.2'
}
apply plugin: 'com.google.gms.google-services'
Lors de la construction du projet, j'obtiens l'erreur:
Erreur: Erreur lors de la conversion du bytecode en dex: Cause: com.Android.dex.DexException: plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException;
La raison de l'erreur est claire, mais je n'ai compilé aucune bibliothèque deux fois. Devrais-je exclure la classe FirebaseException
du processus de construction manuellement? Si c'est le cas, comment? Peut-être est-ce un bug dans les dépendances de Firebase?
Merci.
J'ai eu ce problème avec le module react-native-google-signin
. Comme les instructions pour modifier build.gradle
ne sont souvent pas à jour, incomplètes ou simplement définies dans plusieurs projets non liés, le projet est compilé uniquement après avoir copié les paramètres du projet d'exemple react-native-google-signin
. Il s'avère que l'ordre des instructions est important, ainsi que la commande exclude group
. Le résultat final ressemblait à ceci (en app/build.gradle
):
dependencies {
...
compile 'com.google.Android.gms:play-services-auth:9.2.1'
compile(project(":react-native-google-signin")) {
exclude group: "com.google.Android.gms"
}
}
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply plugin: 'com.google.gms.google-services'
Le build.gradle
supérieur comprenait un classpath gms
supplémentaire comme d'habitude:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:2.2.2'
classpath 'com.google.gms:google-services:3.0.0'
}
}
Une fois ces modifications terminées, la génération s'est terminée sans aucune erreur Multiple dex
.
FireBase est une énorme bibliothèque, vous devez donc activer le support multidex dans votre application.
dependencies {
compile ('com.google.firebase:firebase-core:9.0.2') {
exclude module: 'play-services-base'
exclude module: 'support-v4'
exclude module: 'support-annotations'
}
compile 'com.Android.support:multidex:1.0.1'
}
defaultConfig {
// Enabling multidex support.
multiDexEnabled true
}
On dirait que vous avez atteint nombre maximal de méthodes . Essayez de supprimer les dépendances firebase
et de vérifier le nombre de méthodes de contrôle pour votre application (par exemple, avec ce plugin Gradle) utiliser le plugin count count).
Firebase est une bibliothèque ÉNORME - 17k + méthodes. Cela dépend de tonnes de choses. Une chose à faire est de vérifier la liste des dépendances en cliquant sur le bouton "methodscount.com":
Si vous en avez déjà dans votre projet, vous pouvez essayer de les exclure:
compile ('com.google.firebase:firebase-core:9.0.2') {
exclude module: 'play-services-base'
exclude module: 'support-v4'
exclude module: 'support-annotations'
}
Si cela ne vous aide pas, vous voudrez peut-être configurer multidex _ pour votre projet.
J'utilise réact-native-maps et réag-native-google-signin.
Et j’ai eu Plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException
Ci-dessous ma solution.
Ouvrez build.gradle (react-native-maps)
dependencies {
provided "com.facebook.react:react-native:+"
compile "com.google.Android.gms:play-services-base:10.2.4"
compile "com.google.Android.gms:play-services-maps:10.2.4"
}
La version est 10.2.4
Continuer à ouvrir build.gradle (react-native-google-signin)
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile "com.Android.support:appcompat-v7:23.0.1"
compile 'com.google.Android.gms:play-services-auth:9.2.1' <- change here
compile "com.facebook.react:react-native:+"
}
Il utilise la version 9.2.1, et c'est la raison.
Le changer pour la version 10.2.4 sera
compile 'com.google.Android.gms:play-services-auth:10.2.4'
Ensuite, ouvrez build.gradle (app) et ajoutez-en un nouveau.
compile 'com.google.Android.gms:play-services-auth:10.2.4'
Maintenant vous avez.
compile 'com.google.Android.gms:play-services-auth:10.2.4'
compile(project(":react-native-google-signin")){
exclude group: "com.google.Android.gms"
}
Exécutez la commande cd Android & gradlew clean & cd ..
util sans erreur puis exécutez react-native run-Android
. Hope peut vous aider.
Au cas où cela aiderait quelqu'un, je rencontrais un problème similaire, il était causé par le plug-in Gradle pour les services Google, générant une dépendance en conflit avec Firebase.
Dans mon build.gradle de niveau supérieur, j'avais, dans le script de construction:
classpath 'com.google.gms:google-services:3.0.0'
Ce qui apportait (automatiquement) des dépendances en conflit dans le build.gradle de mon application:
compile 'com.firebaseui:firebase-ui-auth:2.2.0'
Un peu déroutant car je n'avais qu'une dépendance à la compilation et que je me gratifiais la tête de ce qui pourrait être un amalgame.
J'ai enlevé le plugin de google-services gradle et le problème a été résolu. Je suppose que je pourrais aussi trouver la bonne version :)
En effet, certaines de vos bibliothèques utilisent des versions différentes des autres bibliothèques.
Vérifiez votre dernière bibliothèque ajoutée et excluez .
compile(project(':react-native-firestack')){
exclude group: "com.google.Android.gms" // very important
}
J'ai rencontré cette erreur lorsque j'utilisais firebase-ui: 2.0.0. J'ai réussi à le résoudre en rétrogradant à 'com.firebaseui:firebase-ui:1.2.0'
et j'ai ajouté la ligne suivante dans le niveau de construction build.gradle:
allprojects {
repositories {
jcenter()
// Add the following
maven {
url 'https://maven.fabric.io/public'
}
}
}
Merci à this post , il suffit de vérifier et de mettre à niveau vos versions de dépendances Google vers la dernière version.
Je pourrais résoudre mon problème. Le problème était que BaseGameUtils était toujours utiliser/référencer une ancienne version de play-services. Ajout du correct version, et cela fonctionne maintenant. Je suppose que je vais omettre BaseGameUtils pour mon prochain projet.