尽管加载了“依赖图”,但带有链接库的React-Native 0.60+仍未运行

时间:2019-09-18 03:15:41

标签: android react-native react-native-android react-native-firebase react-native-code-push

我有一个弹出的带有多个链接库的本机应用程序,该应用程序无法在Android中运行(在iOS中可以运行)。依赖图加载到100%,有时会在模拟器上显示启动屏幕,但是当模拟器尝试加载js包时,它立即崩溃。

package.json中的相关软件包

    "react": "16.8.6",
    "react-native": "0.60.5",
    "react-native-code-push": "^5.6.1",
    "rn-fetch-blob": "0.10.16",
    "react-native-firebase": "^5.5.5",
    "react-native-image-crop-picker": "^0.25.0",
    "react-native-linear-gradient": "^2.5.6",
    "react-native-splash-screen": "^3.2.0",
    "react-native-vector-icons": "^6.6.0",

android / build.gradle

buildscript {
  ext {
    buildToolsVersion = "27.0.0"
    minSdkVersion = 16
    compileSdkVersion = 28
    targetSdkVersion = 26
    supportLibVersion = "28.0.0"
    googlePlayServicesVersion = "16.1.0"
    firebaseVersion = "17.3.4"
  }
  repositories {
    google()
    jcenter()
    maven {
      url 'https://maven.fabric.io/public'
    }
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0'
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'com.google.firebase:firebase-plugins:1.2.0'
    classpath 'io.fabric.tools:gradle:1.26.1'
  }
}

allprojects {
  repositories {
    mavenLocal()
    google()
    jcenter()
    maven {
      // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
      url "$rootDir/../node_modules/react-native/android"
    }
    maven { url "https://jitpack.io" } // required by react-native-image-crop-picker
  }
}

android / app / build.gradle

apply plugin: "com.android.application"
apply plugin: "com.google.firebase.firebase-perf"
apply plugin: 'io.fabric'

import com.android.build.OutputFile

project.ext.react = [
  entryFile: "index.js",
  enableHermes: false,
]

apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"


def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false

android {
  lintOptions {
    disable 'GradleCompatible'
    disable 'InvalidPackage'
  }

  // because of firestore:
  dexOptions {
    javaMaxHeapSize "4g"
  }
  compileSdkVersion rootProject.ext.compileSdkVersion
  buildToolsVersion rootProject.ext.buildToolsVersion

  defaultConfig {
    applicationId "com.HIDDEN"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
    ndk {
      abiFilters "armeabi-v7a", "x86"
    }
    // because of firestore:
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
  }
  splits {
    abi {
      reset()
      enable enableSeparateBuildPerCPUArchitecture
      universalApk false  // If true, also generate a universal APK
      include "armeabi-v7a", "x86"
    }
  }
  buildTypes {
    release {
      minifyEnabled enableProguardInReleaseBuilds
      proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
    debug {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
  applicationVariants.all { variant ->
    variant.outputs.each { output ->
      // For each separate APK per architecture, set a unique version code as described here:
      // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
      def versionCodes = ["armeabi-v7a": 1, "x86": 2]
      def abi = output.getFilter(OutputFile.ABI)
      if (abi != null) {  // null for the universal-debug, universal-release variants
        output.versionCodeOverride =
          versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
      }
    }
  }
}

dependencies {
    implementation project(':rn-fetch-blob')
    implementation project(':react-native-image-crop-picker')
    implementation project(':@react-native-community_geolocation')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-splash-screen')
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-code-push')
    implementation project(':react-native-firebase')

  // RNFirebase required dependencies
  implementation "com.google.android.gms:play-services-base:16.0.1"
  implementation "com.google.firebase:firebase-core:16.0.9"
  // RNFirebase modules
  implementation "com.google.firebase:firebase-auth:17.0.0"
  implementation "com.google.firebase:firebase-analytics:16.5.0"
  implementation "com.google.firebase:firebase-perf:16.2.4"
  implementation "com.google.firebase:firebase-storage:17.0.0"
  implementation "com.google.firebase:firebase-dynamic-links:17.0.0"
  implementation "com.google.firebase:firebase-database:17.0.0"
  implementation "com.google.firebase:firebase-functions:17.0.0"
  implementation "com.google.firebase:firebase-firestore:19.0.0"
  implementation "com.google.firebase:firebase-messaging:18.0.0"
  implementation 'me.leolin:ShortcutBadger:1.1.21@aar'

  implementation "com.facebook.react:react-native:+"
  implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
  implementation "com.android.support:support-annotations:${rootProject.ext.supportLibVersion}"
  implementation fileTree(dir: "libs", include: ["*.jar"])
}

task copyDownloadableDepsToLibs(type: Copy) {
  from configurations.compile
  into 'libs'
}

apply plugin: 'com.google.gms.google-services'
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

MainApplication.java

package com.HIDDEN;

import android.annotation.SuppressLint;
import android.app.Application;

import com.facebook.react.ReactApplication;
import com.RNFetchBlob.RNFetchBlobPackage;
import com.reactnativecommunity.geolocation.GeolocationPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import org.devio.rn.splashscreen.SplashScreenReactPackage;
import org.devio.rn.splashscreen.SplashScreen;
import com.BV.LinearGradient.LinearGradientPackage;
import com.reactnative.ivpusic.imagepicker.PickerPackage;
import com.microsoft.codepush.react.CodePush;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;

import io.invertase.firebase.RNFirebasePackage;
// optional packages - add/remove as appropriate
import io.invertase.firebase.analytics.RNFirebaseAnalyticsPackage;
import io.invertase.firebase.auth.RNFirebaseAuthPackage;
import io.invertase.firebase.database.RNFirebaseDatabasePackage;
import io.invertase.firebase.firestore.RNFirebaseFirestorePackage;
import io.invertase.firebase.functions.RNFirebaseFunctionsPackage;
import io.invertase.firebase.instanceid.RNFirebaseInstanceIdPackage;
import io.invertase.firebase.links.RNFirebaseLinksPackage;
import io.invertase.firebase.messaging.RNFirebaseMessagingPackage;
import io.invertase.firebase.notifications.RNFirebaseNotificationsPackage;
import io.invertase.firebase.perf.RNFirebasePerformancePackage;
import io.invertase.firebase.storage.RNFirebaseStoragePackage;

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

public class MainApplication extends Application implements ReactApplication {

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {

    @Override
    protected String getJSBundleFile() {
      return CodePush.getJSBundleFile();
    }

    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @SuppressLint("MissingPermission")
    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.asList(
        new MainReactPackage(),
        new RNFetchBlobPackage(),
        new GeolocationPackage(),
        new VectorIconsPackage(),
        new SplashScreenReactPackage(),
        new LinearGradientPackage(),
        new PickerPackage(),
        new CodePush("HIDDEN", getApplicationContext(), BuildConfig.DEBUG),
        new RNFirebasePackage(),
        // add/remove these packages as appropriate
        new RNFirebaseAnalyticsPackage(),
        new RNFirebaseAuthPackage(),
        new RNFirebaseDatabasePackage(),
        new RNFirebaseFirestorePackage(),
        new RNFirebaseFunctionsPackage(),
        new RNFirebaseInstanceIdPackage(),
        new RNFirebaseLinksPackage(),
        new RNFirebaseMessagingPackage(),
        new RNFirebaseNotificationsPackage(),
        new RNFirebasePerformancePackage(),
        new RNFirebaseStoragePackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, false);
  }
}

MainActivity.java

package com.HIDDEN;

import android.os.Bundle;
import com.facebook.react.ReactActivity;
import org.devio.rn.splashscreen.SplashScreen;

public class MainActivity extends ReactActivity {
    @Override
    protected String getMainComponentName() {
        return "CashoutSports";
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this);  // here
        super.onCreate(savedInstanceState);
    }
}

1 个答案:

答案 0 :(得分:0)

我从未从事过React-native项目。但是我认为MainActivity.java中有问题。

在Android中,通常我们在super.onCreate()之后启动初始UI代码。 也许您可以在调用super.onCreate

之后再调用SplashScreen.show
super.onCreate(savedInstanceState);
SplashScreen.show(this);  // here