S. Nas
S. Nas

Reputation: 331

Compile react-native with react-native-firebase

Before I proceed, please note that I have resorted to StackOverflow as my last hope, and I have spent hours searching over GitHub and past "related" question.

In a simple context, I'm trying to use react-native-firebase in my react-native app targeting android platform.

The below code is exactly followed based on the step by step given by react-native-firebase

app\build.gradle

...

dependencies {
    compile(project(':react-native-firebase')) {
        transitive = false
    }
    compile project(':react-native-config')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
    compile "com.google.android.gms:play-services-base:11.6.0"
    compile "com.google.firebase:firebase-core:11.6.0"
}

...

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

android\build.gradle

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

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

allprojects {
    repositories {
        mavenLocal()
        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://maven.google.com'
        }
    }
}

android\app\src\main\java\com\HF\MainApplication.java

...

import io.invertase.firebase.RNFirebasePackage;
import io.invertase.firebase.database.RNFirebaseDatabasePackage;

...


@Override
protected List < ReactPackage > getPackages() {
  return Arrays. < ReactPackage > asList(
    new MainReactPackage(),
    new RNFirebasePackage(),
    new ReactNativeConfigPackage(),
    new RNFirebaseDatabasePackage()
  );
}

...

However, in the end, it just doesn't run, gives me a weird error. I have tried everything I could but to no avail. Any help would be appreciated.

Thanks

If you're curious about the error

:app:processDebugManifest                 
:app:processDebugResources                 
:app:generateDebugSources
:app:incrementalDebugJavaCompilationSafeguard                 
:app:compileDebugJavaWithJavac                 
:app:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
:app:compileDebugNdk UP-TO-DATE                
:app:compileDebugSources
:app:transformClassesWithDexForDebug FAILED          
              
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.io.IOException: Unable to create parent directories of C:\King's_College_London\Final_Year_Project\HeartFailure\android\app\build\interm
ediates\pre-dexed\debug\com.android.support-support-core-ui-25.2.0_ed7d36204e2346bc863c0a6433807d11a8ea28a3.jar

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1 mins 38.333 secs
Could not install the app on the device, read the error above for details.
Make sure you have an Android emulator running or a device connected and have
set up your Android development environment:
https://facebook.github.io/react-native/docs/android-setup.html

Upvotes: 1

Views: 12017

Answers (2)

S. Nas
S. Nas

Reputation: 331

As said by @sfratini, this isn't about firebase, but the error actually originates from importing react-native-firebase.

Now for those who might experience this issue in the future, I have found the solution and so please follow each step clearly and exactly.

All in all, if you have imported react-native-firebase and encounter any type of error, then this is because of purely the versions. then follow this:

1.) app\build.gradle

...

// change your dependency object to add the following lines
dependencies {
  compile(project(':react-native-firebase')) {
    transitive = false
  }
  compile project(':react-native-config')
  compile fileTree(dir: "libs", include: ["*.jar"])
  compile "com.android.support:appcompat-v7:23.0.1"
  compile "com.facebook.react:react-native:+" // From node_modules
  compile "com.google.android.gms:play-services-base:11.6.0"
  compile "com.google.firebase:firebase-core:11.6.0"
  compile "com.google.firebase:firebase-database:11.6.0"
}

// this line is very important.
apply plugin: 'com.google.gms.google-services'

2.) anddroid\build.gradle

buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    
    // compy the following exactly like this
    classpath 'com.android.tools.build:gradle:2.2.3'
    classpath 'com.google.gms:google-services:3.1.2'

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

allprojects {
  repositories {
    mavenLocal()
    jcenter()
    
    /// notice the same objecct maven, but with different url
    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://maven.google.com'
    }
  }
}

3.) android\app\src\main\java\com\[yourAppName]\MainApplication.java

// import these two
import io.invertase.firebase.RNFirebasePackage;
import io.invertase.firebase.database.RNFirebaseDatabasePackage;

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }


    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
        new MainReactPackage(),
        new ReactNativeConfigPackage(),
        new RNFirebasePackage(),
        new RNFirebaseDatabasePackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };
  
  ....
  // you'll have other code below, leave that as it is

Then do the following:

npm cache verify
react-native run-android

Upvotes: 2

sebastianf182
sebastianf182

Reputation: 9978

This has nothing to do with firebase.

Try deleting your .gradle folder (make a backup) and make sure you run that from a command line run as an administrator.

Upvotes: 0

Related Questions