新鲜独立博览会+ RNFirebase无法在Android上运行

时间:2017-10-08 13:06:47

标签: android react-native expo react-native-firebase

所以我尝试使用Detached Expokit和React Native Firebase(v3)启动应用程序

我用exp cli创建了一个新项目, 按照https://invertase.io/react-native-firebase/的所有说明设置ios,运行正常 按照设置在android上的所有说明, 在expo依赖项和firebase依赖项之间经历了一些依赖性地狱

现在没有更多警告,也没有更多错误,但是当我尝试运行应用程序(模拟器或物理)时,它会将js包加载到100%,然后崩溃。没有错误或消息,只是崩溃。

我已经尝试了我能想到的一切(清理,重建,清除缓存,重新安装npm,降级到RNFirebase 2x)

之前有没有人遇到过这个问题,或者知道如何修复? 提前致谢

项目信息(如果需要,请询问更多)

的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"
    }
  }
}

project 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:21.0.0@aar') {
    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()
    );
  }
}

2 个答案:

答案 0 :(得分:3)

经过几天的摆弄,我终于让它运行了!

诀窍是,我必须手动编译版本不匹配的每个Google Play服务模块。

(当您将鼠标悬停在依赖项上时,您可以看到版本不匹配作为警告)

  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"

答案 1 :(得分:2)

RNFirebase的共同作者,

我们从来没有真正支持过世博会,除了完全弹射之后 - 没有Detached ExpoKit,因为随后的Gyroid=(cos(x) .* sin(y) + cos(y) .* sin(z) + cos(z) .* sin(x)); % Reverse Gyroid R=sqrt( (-sin(x).*sin(y)+cos(x).*cos(z)).^2+(- sin(y).*sin(z)+cos(y).*cos(x)).^2+(-sin(z).*sin(x)+cos(z).*cos(y)).^2 ); ReverseGyroid=(Gyroid.*T./R); isosurface(Gyroid) isosurface(ReverseGyroid) 在Android上附带了ExpoKit。

尽管如此,我很高兴您通过它并使其正常工作,对其他人有用的是,如果您能提供详细的步骤以使其正常工作(即它是否只是手动覆盖上述版本?并且我们可以为其他任何想要冒风险的人记录它:)