4

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: https://www.spritle.com/blogs/2016/02/15/integrate-fabricio-crashlytics-to-a-react-native-android-app/

https://www.mojotech.com/blog/fabric-integration-for-react-native-on-android/

but still it didn't work.

I tried appcenter.ms too, I got views and sessions but still got no report on crashes.

project code for Firebase and Fabric implimendation

app/build.gradle file

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 ->
    variant.outputs.each { output ->
        // 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)

project build.gradle file

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()
   }
 }

App.js

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 (
    <View style = {styles.container}>
       <Text>Open up App.js to start working on your app!</Text>
       <Text>Changes you make will automatically reload.</Text>
       <Text>Shake your phone to open the developer menu.</Text>
    </View>
 );
  }
 }

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',
},
 });

What should I do to get this crash reporting going?

0

1 Answer 1

2

Firebase and fabric won't work together. Remove Fabric.properties file from your project and then crash the application.

I have a total working demo of crash analytics : https://github.com/RishavKumar-3796/CrashAnalytics_Firebase Change the firebase keys and see the integration part

Sign up to request clarification or add additional context in comments.

1 Comment

Right, Firebase and Fabric won't work together, so make sure you don't mix any of the instructions between the two instruction sets. This link might also be useful for react native + firebase crashlytics: npmjs.com/package/@react-native-firebase/crashlytics

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.