title: Add crash reporting framework to react native app
body: <p>I've tried adding Firebase and Fabric framework to my react native (android) app. I followed the steps and set it up successfully and tested a forced crash but I couldn't get crash report on JavaScript files.
  I found these links:
  <a href="https://www.spritle.com/blogs/2016/02/15/integrate-fabricio-crashlytics-to-a-react-native-android-app/" rel="nofollow noreferrer">https://www.spritle.com/blogs/2016/02/15/integrate-fabricio-crashlytics-to-a-react-native-android-app/</a></p>
  
  <p><a href="https://www.mojotech.com/blog/fabric-integration-for-react-native-on-android/" rel="nofollow noreferrer">https://www.mojotech.com/blog/fabric-integration-for-react-native-on-android/</a></p>
  
  <p>but still it didn't work.</p>
  
  <p>I tried <a href="http://appcenter.ms" rel="nofollow noreferrer">appcenter.ms</a> too, I got views and sessions but still got no report on crashes.</p>
  
  <p>project code for Firebase and Fabric implimendation</p>
  
  <p><strong>app/build.gradle file</strong></p>
  
  <pre><code>apply plugin: "com.android.application"
  apply plugin: "io.fabric"
  import com.android.build.OutputFile
   project.ext.react = [
   entryFile: "index.js",
   enableHermes: false,  // clean and rebuild if changing
   ]
   apply from: "../../node_modules/react-native/react.gradle"
   def enableSeparateBuildPerCPUArchitecture = false
   def enableProguardInReleaseBuilds = false
  def jscFlavor = 'org.webkit:android-jsc:+'
  def enableHermes = project.ext.react.get("enableHermes", false);
  
   android {
   compileSdkVersion rootProject.ext.compileSdkVersion
   compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }
   defaultConfig {
      applicationId "com.sample2"
      minSdkVersion rootProject.ext.minSdkVersion
      targetSdkVersion rootProject.ext.targetSdkVersion
      versionCode 1
      versionName "1.0"
   }
   splits {
      abi {
          reset()
          enable enableSeparateBuildPerCPUArchitecture
          universalApk false  // If true, also generate a universal APK
          include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
      }
  }
  signingConfigs {
      debug {
          storeFile file('debug.keystore')
          storePassword 'android'
          keyAlias 'androiddebugkey'
          keyPassword 'android'
      }
  }
  buildTypes {
      debug {
          signingConfig signingConfigs.debug
          ext.enableCrashlytics = true
      }
      release {
          // Caution! In production, you need to generate your own keystore file.
          // see https://facebook.github.io/react-native/docs/signed-apk-android.
          signingConfig signingConfigs.debug
          minifyEnabled enableProguardInReleaseBuilds
          proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
      }
  }
  applicationVariants.all { variant -&gt;
      variant.outputs.each { output -&gt;
          // For each separate APK per architecture, set a unique version code as described here:
          // https://developer.android.com/studio/build/configure-apk-splits.html
          def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
          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
          }
  
      }
  }
  packagingOptions {
      pickFirst '**/armeabi-v7a/libc++_shared.so'
      pickFirst '**/x86/libc++_shared.so'
      pickFirst '**/arm64-v8a/libc++_shared.so'
      pickFirst '**/x86_64/libc++_shared.so'
      pickFirst '**/x86/libjsc.so'
      pickFirst '**/armeabi-v7a/libjsc.so'
  }
  repositories {
   maven { url "https://jitpack.io" }
   maven { url "https://maven.fabric.io/public" }
   }
  }
   dependencies {
  compile("com.crashlytics.sdk.android:crashlytics:2.5.5@aar") {
   transitive = true;}
    implementation project(':react-native-fabric')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules
   implementation 'com.google.firebase:firebase-core:16.0.4'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
   if (enableHermes) {
    def hermesPath = "../../node_modules/hermesvm/android/";
    debugImplementation files(hermesPath + "hermes-debug.aar")
    releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
    implementation jscFlavor
    }
    }
     task copyDownloadableDepsToLibs(type: Copy) {
     from configurations.compile
     into 'libs'  }
   apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); 
   applyNativeModulesAppBuildGradle(project)
  </code></pre>
  
  <p><strong>project build.gradle file</strong></p>
  
  <pre><code>buildscript {
  ext {
      buildToolsVersion = "28.0.3"
      minSdkVersion = 16
      compileSdkVersion = 28
      targetSdkVersion = 28
      supportLibVersion = "28.0.0"
  }
   repositories {
      google()
      jcenter()
      maven { url "https://maven.fabric.io/public" }
  }
  dependencies {
      classpath("com.android.tools.build:gradle:3.4.1")
      classpath "com.android.tools.build:gradle:1.3.1"
      classpath "io.fabric.tools:gradle:1.+"
      // NOTE: Do not place your application dependencies here; they belong
      // in the individual module build.gradle files
    }
   }
  
  allprojects {
  repositories {
      mavenLocal()
      maven {
          // All of React Native (JS, Obj-C sources, Android binaries) is 
       installed from npm
          url("$rootDir/../node_modules/react-native/android")
       }
      maven {
          // Android JSC is installed from npm
          url("$rootDir/../node_modules/jsc-android/dist")
      }
  
      google()
      jcenter()
     }
   }
  </code></pre>
  
  <p><strong>App.js</strong></p>
  
  <pre><code>import React, {Fragment} from 'react';
  import { SafeAreaView, StyleSheet, ScrollView, View,Text,StatusBar,} from 
  'react-native';
   import Fabric from 'react-native-fabric';
   import Crashlytics from 'react-native-fabric-crashlytics';
  import {  Header,  LearnMoreLinks,  Colors,  DebugInstructions, 
  ReloadInstructions,} from 'react-native/Libraries/NewAppScreen';
  
   export default class App extends React.Component {
  
   componentWillMount(){
   var { Crashlytics } = Fabric;
  Crashlytics.crash();
  
    }
   render() {
   return (
      &lt;View style = {styles.container}&gt;
         &lt;Text&gt;Open up App.js to start working on your app!&lt;/Text&gt;
         &lt;Text&gt;Changes you make will automatically reload.&lt;/Text&gt;
         &lt;Text&gt;Shake your phone to open the developer menu.&lt;/Text&gt;
      &lt;/View&gt;
   );
    }
   }
  
  const styles = StyleSheet.create({
  scrollView: {
  backgroundColor: Colors.lighter,
  },
  engine: {
  position: 'absolute',
  right: 0,
  },
  body: {
    backgroundColor: Colors.white,
   },
   sectionContainer: {
   marginTop: 32,
   paddingHorizontal: 24,
  },
    sectionTitle: {
   fontSize: 24,
   fontWeight: '600',
   color: Colors.black,
   },
    sectionDescription: {
   marginTop: 8,
  fontSize: 18,
  fontWeight: '400',
  color: Colors.dark,
  },
  highlight: {
  fontWeight: '700',
   },
   footer: {
  color: Colors.dark,
  fontSize: 12,
  fontWeight: '600',
  padding: 4,
  paddingRight: 12,
  textAlign: 'right',
  },
   });
  </code></pre>
  
  <p>What should I do to get this crash reporting going?</p>