2017-10-08 9 views
1

lecteur de longue date, première affiche de temps,frais Détaché Expo + RNFirebase ne fonctionne pas sur Android

Je suis en train de démarrer une application en utilisant l'Détaché Expokit et React natif Firebase (v3)

J'ai fait un nouveau projet avec exp cli, suivi toutes les instructions à https://invertase.io/react-native-firebase/ pour mettre en place ios, et il fonctionne très bien suivi toutes les instructions pour mettre en place sur Android, a traversé un certain enfer de dépendance entre les dépendances expo et dépendances Firebase

An d maintenant il n'y a plus d'avertissements, et plus d'erreurs, mais quand j'essaie d'exécuter l'application (émulateur ou physique), elle charge le paquet js à 100%, puis tombe en panne. Pas d'erreurs ou de messages, il suffit de planter.

Ive a essayé tout ce que je peux penser (propre, reconstruire, effacer le cache, réinstaller NPM, déclasser à RNFirebase 2x)

Quelqu'un at-il rencontré ce problème avant, ou savoir comment résoudre? Merci à l'avance


information sur le projet (lui demander plus d'si nécessaire)

package.json:

"dependencies": { 
    "expo": "^21.0.0", 
    "react": "16.0.0-alpha.12", 
    "react-native": "https://github.com/expo/react-native/archive/sdk-21.0.2.tar.gz", 
    "react-native-firebase": "^3.0.2" 
    } 

app.json:

{ 
    "expo": { 
    "name": "xxx", 
    "description": "An empty new project", 
    "slug": "xxx", 
    "privacy": "unlisted", 
    "sdkVersion": "20.0.0", 
    "version": "1.0.0", 
    "orientation": "portrait", 
    "primaryColor": "#cccccc", 
    "icon": "./assets/icons/app-icon.png", 
    "loading": { 
     "icon": "./assets/icons/loading-icon.png" 
    }, 
    "packagerOpts": { 
     "assetExts": [ 
     "ttf", 
     "mp4" 
     ] 
    }, 
    "ios": { 
     "supportsTablet": true, 
     "bundleIdentifier": "xxx", 
     "publishBundlePath": "ios/xxx/Supporting/shell-app.bundle", 
     "publishManifestPath": "ios/xxx/Supporting/shell-app-manifest.json" 
    }, 
    "android": { 
     "package": "xxx" 
    }, 
    "isDetached": true, 
    "detach": { 
     "scheme": "exp7d16843de771498786f3beabce0d6439", 
     "iosExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/ios-v1.20.5-sdk21.0.0-xxx.tar.gz", 
     "androidExpoViewUrl": "https://s3.amazonaws.com/exp-exponent-view-code/android-v1.20.0-sdk21.0.0-xxx.tar.gz" 
    } 
    } 
} 

projet build.gradle :

// Top-level build file where you can add configuration options common to all sub-projects/modules. 

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath 'com.android.tools.build:gradle:2.3.3' 
    classpath 'com.google.gms:google-services:3.1.1' 

    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
    mavenLocal() 
    jcenter() 
    maven { 
     // Point to local maven repository 
     url "$rootDir/../.expo-source/android/maven" 
    } 
    maven { 
     url 'https://maven.google.com' 
    } 
    maven { 
     url "https://jitpack.io" 
    } 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

app build.gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion '25.0.2' 

    defaultConfig { 
    applicationId "xxx" 
    minSdkVersion 19 
    targetSdkVersion 25 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 
    ndk { 
     abiFilters 'armeabi-v7a', 'x86' 
    } 
    manifestPlaceholders = [ 
     'appAuthRedirectScheme': 'xxx' 
    ] 
    } 
    buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    } 
    dexOptions { 
    javaMaxHeapSize "8g" 
    } 
    packagingOptions { 
    pickFirst 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties' 
    pickFirst 'META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml' 
    pickFirst 'META-INF/services/com.fasterxml.jackson.core.JsonFactory' 
    pickFirst 'META-INF/maven/com.squareup.okhttp/okhttp/pom.properties' 
    pickFirst 'META-INF/maven/com.squareup.okhttp/okhttp/pom.xml' 
    pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.properties' 
    pickFirst 'META-INF/maven/com.squareup.okio/okio/pom.xml' 
    pickFirst 'META-INF/LICENSE' 
    } 
} 

task exponentPrebuildStep(type: Exec) { 
    workingDir '../../' 

    if (System.getProperty('os.name').toLowerCase().contains('windows')) { 
    commandLine 'cmd', '/c', '.\\.expo-source\\android\\detach-scripts\\prepare-detached-build.bat' 
    } else { 
    commandLine './.expo-source/android/detach-scripts/prepare-detached-build.sh' 
    } 
} 
preBuild.dependsOn exponentPrebuildStep 

repositories{ 
    flatDir{ 
    dirs 'libs' 
    } 
    mavenLocal() 
    maven { url 'https://maven.fabric.io/public' } 
} 

dependencies { 
    compile(project(':react-native-firebase')) { 
    // exclude group: 'com.google.android.gms' 
    // exclude group: 'com.google.firebase' 
    transitive = false 
    } 

    // RNFirebase required dependencies 
    compile "com.google.firebase:firebase-core:11.4.2" 

    // RNFirebase optional dependencies 
    // compile "com.google.firebase:firebase-ads:11.4.2" 
    // compile "com.google.firebase:firebase-auth:11.4.2" 
    // compile "com.google.firebase:firebase-config:11.4.2" 
    // compile "com.google.firebase:firebase-crash:11.4.2" 
    compile "com.google.firebase:firebase-database:11.4.2" 
    // compile "com.google.firebase:firebase-firestore:11.4.2" 
    // compile "com.google.firebase:firebase-messaging:11.4.2" 
    // compile "com.google.firebase:firebase-perf:11.4.2" 
    // compile "com.google.firebase:firebase-storage:11.4.2" 

    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile ('com.android.support:appcompat-v7:25.3.1') { 
    force = true 
    } 
    compile ('com.android.support:recyclerview-v7:25.3.1') { 
    force= true 
    } 
    compile ('com.android.support:animated-vector-drawable:25.3.1') { 
    force= true 
    } 
// compile 'com.android.support:multidex:1.0.1' 


    compile('host.exp.exponent:expoview:[email protected]') { 
    exclude group: 'com.google.android.gms' 
    exclude group: 'com.facebook.android', module: 'facebook-android-sdk' 
    exclude group: 'com.facebook.android', module: 'audience-network-sdk' 
    exclude group: 'io.nlopez.smartlocation', module: 'library' 
    transitive = true; 
    } 

    compile ("com.google.android.gms:play-services-base:11.4.2") { 
    force = true 
    } 
    compile ("com.google.android.gms:play-services-maps:11.4.2") { 
    force = true 
    } 
    compile ('com.facebook.android:facebook-android-sdk:4.+') { 
    exclude module: 'bolts-android' 
    } 
    compile('com.facebook.android:audience-network-sdk:4.+') { 
    exclude module: 'play-services-ads' 
    } 
    compile('io.nlopez.smartlocation:library:3.2.11') { 
    transitive = false 
    } 

} 

apply plugin: 'com.google.gms.google-services' 

mainApplication.java:

package xxx; 

import android.support.multidex.MultiDexApplication; 

import com.facebook.react.ReactPackage; 

import java.util.Arrays; 
import java.util.List; 

// Needed for `react-native link` 
// import com.facebook.react.ReactApplication; 

// React Native Firebase 
import io.invertase.firebase.RNFirebasePackage; // <-- This should be added already 
// Optional packages - add as appropriate 
// import io.invertase.firebase.admob.RNFirebaseAdMobPackage; //Firebase AdMob 
// import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage; // Firebase Analytics 
// import io.invertase.firebase.auth.RNFirebaseAuthPackage; // Firebase Auth 
// import io.invertase.firebase.config.RNFirebaseRemoteConfigPackage; // Firebase Remote Config 
// import io.invertase.firebase.crash.RNFirebaseCrashPackage; // Firebase Crash Reporting 
import io.invertase.firebase.database.RNFirebaseDatabasePackage; // Firebase Realtime Database 
// import io.invertase.firebase.firestore.RNFirebaseFirestorePackage; // Firebase Firestore 
// import io.invertase.firebase.messaging.RNFirebaseMessagingPackage; // Firebase Cloud Messaging 
// import io.invertase.firebase.perf.RNFirebasePerformancePackage; // Firebase Performance 
// import io.invertase.firebase.storage.RNFirebaseStoragePackage; // Firebase Storage 

public class MainApplication extends MultiDexApplication { 

    // Needed for `react-native link` 
    public List<ReactPackage> getPackages() { 
    return Arrays.<ReactPackage>asList(
     // Add your own packages here! 
     // TODO: add cool native modules 

     // Needed for `react-native link` 
     // new MainReactPackage(), 
     new RNFirebasePackage(), 
     // Add these packages as appropriate 
     // new RNFirebaseAdMobPackage(), 
     // new RNFirebaseAnalyticsPackage(), 
     // new RNFirebaseAuthPackage(), 
     // new RNFirebaseRemoteConfigPackage(), 
     // new RNFirebaseCrashPackage(), 
     new RNFirebaseDatabasePackage() 
     // new RNFirebaseFirestorePackage(), 
     // new RNFirebaseMessagingPackage(), 
     // new RNFirebasePerformancePackage(), 
     // new RNFirebaseStoragePackage() 
    ); 
    } 
} 

Répondre

3

après plusieurs jours de tripoter, je l'ai finalement obtenu à courir! L'astuce était que je devais compiler manuellement chaque module de service Google Play qui présentait une différence de version.

(Vous pouvez voir les différences de version comme un avertissement lorsque vous passez la souris sur la dépendance)

compile "com.google.android.gms:play-services-base:11.4.2" 
    compile "com.google.android.gms:play-services-base-license:11.4.2" 
    compile "com.google.android.gms:play-services-ads:11.4.2" 
    compile "com.google.android.gms:play-services-ads-lite:11.4.2" 
    compile "com.google.android.gms:play-services-ads-license:11.4.2" 
    compile "com.google.android.gms:play-services-analytics:11.4.2" 
    compile "com.google.android.gms:play-services-analytics-impl:11.4.2" 
    compile "com.google.android.gms:play-services-auth:11.4.2" 
    compile "com.google.android.gms:play-services-auth-base:11.4.2" 
    compile "com.google.android.gms:play-services-fitness:11.4.2" 
    compile "com.google.android.gms:play-services-gcm:11.4.2" 
    compile "com.google.android.gms:play-services-identity:11.4.2" 
    compile "com.google.android.gms:play-services-maps:11.4.2" 
    compile "com.google.android.gms:play-services-wallet:11.4.2" 
2

co-auteur de RNFirebase ici,

Nous avons jamais vraiment soutenu Expo autre que après éjection complète - sans détaché ExpoKit en raison de la suite dependency hell qui vient avec ExpoKit sur android. Cela dit, je suis content que vous l'ayez fait fonctionner et que cela fonctionne, ce qui serait utile pour les autres, si vous pouviez fournir des étapes détaillées pour le faire fonctionner (c.-à-d. ?) et nous pouvons éventuellement le documenter pour quelqu'un d'autre qui veulent risquer leur santé mentale :)

+0

l'astuce pour moi était d'ouvrir le projet dans Android Studio, essayer de construire, et regarder à travers les fichiers gradle à la recherche de tout ce qui avait des lignes squigly dessous (indiquant une erreur/avertissement). Ces avertissements disent généralement quelque chose à propos de la non-concordance de version et pour chacun de ces fichiers qui ont des versions différentes, je devais explicitement les exiger dans le fichier avec la version la plus à jour ( À la fin de la Le jour même, j'ai pris votre (et le conseil de quelqu'un d'autre et ai laissé tomber l'expokit en faveur des paquets individuels dont j'avais besoin. –