Issue
I tried to add the react-native-firebase library https://github.com/invertase/react-native-firebase and everything works perfectly on iOS. When it comes to integration on android, nothing works. The project Builds correctly, but the app crashes (only in Android) right after the build with this output:
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1099 file(s) to forward-jetify. Using 16 workers...
info Starting JS server...
info Launching emulator...
info Successfully launched emulator.
info Installing the app...
> Configure project :@react-native-firebase_analytics
:@react-native-firebase_analytics:firebase.bom using default value: 21.1.0
:@react-native-firebase_analytics package.json found at /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/@react-native-firebase/analytics/package.json
:@react-native-firebase_analytics:version set from package.json: 6.0.3 (6,0,3 - 6000003)
:@react-native-firebase_analytics:android.compileSdk using custom value: 28:@react-native-firebase_analytics:android.targetSdk using custom value: 28
:@react-native-firebase_analytics:android.minSdk using custom value: 16
:@react-native-firebase_analytics:reactNativeAndroidDir /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/react-native/android
> Configure project :@react-native-firebase_app
:@react-native-firebase_app:firebase.bom using default value: 21.1.0
:@react-native-firebase_app package.json found at /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/@react-native-firebase/app/package.json
:@react-native-firebase_app:version set from package.json: 6.0.3 (6,0,3 - 6000003)
:@react-native-firebase_app:android.compileSdk using custom value: 28
:@react-native-firebase_app:android.targetSdk using custom value: 28
:@react-native-firebase_app:android.minSdk using custom value: 16
:@react-native-firebase_app:reactNativeAndroidDir /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/react-native/android
> Configure project :app
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
> Task :app:processDebugGoogleServices
Parsing json file: /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/android/app/google-services.j
son
> Task :app:installDebug
12:49:58 V/ddms: execute: running am get-config
12:49:58 V/ddms: execute 'am get-config' on 'emulator-5554' : EOF hit. Read: -1
12:49:58 V/ddms: execute: returning
Installing APK 'app-debug.apk' on '3.7_WVGA_Nexus_One_API_28(AVD) - 9' for app:debug
12:49:58 D/app-debug.apk: Uploading app-debug.apk onto device 'emulator-5554'
12:49:58 D/Device: Uploading file onto device 'emulator-5554'
12:49:58 D/ddms: Reading file permision of /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/android/app/build/outputs/apk/debug/app-debug.apk as: rw-r--r--
12:49:59 V/ddms: execute: running pm install -r -t "/data/local/tmp/app-debug.apk"
12:50:02 V/ddms: execute 'pm install -r -t "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : E
OF hit. Read: -1
12:50:02 V/ddms: execute: returning
12:50:02 V/ddms: execute: running rm "/data/local/tmp/app-debug.apk"
12:50:02 V/ddms: execute 'rm "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : EOF hit. Read:
-1
12:50:02 V/ddms: execute: returning
Installed on 1 device.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 7s
192 actionable tasks: 3 executed, 189 up-to-date
info Connecting to the development server...
info Starting the app on "emulator-5554"...
Starting: Intent { cmp=com.halfy_app/.MainActivity }
MBP-di-Enzo:halfy_app enzomanuelmangano$
MBP-di-Enzo:halfy_app enzomanuelmangano$ react-native run-android --log
error: unknown option `--log'
MBP-di-Enzo:halfy_app enzomanuelmangano$ react-native run-android -log
error: unknown option `-l'
MBP-di-Enzo:halfy_app enzomanuelmangano$ react-native run-android
error React Native CLI uses autolinking for native dependencies, but the following modules are linked manually:
- react-native-maps (to unlink run: "react-native unlink react-native-maps")
This is likely happening when upgrading React Native from below 0.60 to 0.60 or above. Going forward, you can unlink this dependency via "react-native unlink <dependency>" and it will be included in your app automatically. If a library isn't compatible with autolinking, disregard this message and notify the library maintainers.
Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1099 file(s) to forward-jetify. Using 16 workers...
info JS server already running.
info Installing the app...
> Configure project :@react-native-firebase_analytics
:@react-native-firebase_analytics:firebase.bom using default value: 21.1.0
:@react-native-firebase_analytics package.json found at /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/@react-native-firebase/analytics/package.json
:@react-native-firebase_analytics:version set from package.json: 6.0.3 (6,0,3 - 6000003)
:@react-native-firebase_analytics:android.compileSdk using custom value: 28
:@react-native-firebase_analytics:android.targetSdk using custom value: 28
:@react-native-firebase_analytics:android.minSdk using custom value: 16
:@react-native-firebase_analytics:reactNativeAndroidDir /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/react-native/android
> Configure project :@react-native-firebase_app
:@react-native-firebase_app:firebase.bom using default value: 21.1.0
:@react-native-firebase_app package.json found at /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/@react-native-firebase/app/package.json
:@react-native-firebase_app:version set from package.json: 6.0.3 (6,0,3 - 6000003)
:@react-native-firebase_app:android.compileSdk using custom value: 28
:@react-native-firebase_app:android.targetSdk using custom value: 28
:@react-native-firebase_app:android.minSdk using custom value: 16
:@react-native-firebase_app:reactNativeAndroidDir /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/node_modules/react-native/android
> Configure project :app
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
registerResGeneratingTask is deprecated, use registerGeneratedResFolders(FileCollection)
> Task :app:processDebugGoogleServices
Parsing json file: /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/android/app/google-services.j
son
> Task :app:installDebug
12:51:39 V/ddms: execute: running am get-config
12:51:39 V/ddms: execute 'am get-config' on 'emulator-5554' : EOF hit. Read: -1
12:51:39 V/ddms: execute: returning
Installing APK 'app-debug.apk' on '3.7_WVGA_Nexus_One_API_28(AVD) - 9' for app:debug
12:51:39 D/app-debug.apk: Uploading app-debug.apk onto device 'emulator-5554'
12:51:39 D/Device: Uploading file onto device 'emulator-5554'
12:51:39 D/ddms: Reading file permision of /Users/enzomanuelmangano/Desktop/Lavoro/halfy_app/android/app/build/outputs/apk/debug/app-debug.apk as: rw-r--r--
12:51:39 V/ddms: execute: running pm install -r -t "/data/local/tmp/app-debug.apk"
12:51:40 V/ddms: execute 'pm install -r -t "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : EOF hit. Read:
12:51:40 V/ddms: execute: returning
12:51:40 V/ddms: execute: running rm "/data/local/tmp/app-debug.apk"
12:51:40 V/ddms: execute 'rm "/data/local/tmp/app-debug.apk"' on 'emulator-5554' : EOF hit. Read: -1
12:51:40 V/ddms: execute: returning
Installed on 1 device.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 4s
192 actionable tasks: 3 executed, 189 up-to-date
info Connecting to the development server...
info Starting the app on "emulator-5554"...
Starting: Intent { cmp=com.halfy_app/.MainActivity }
Android
android/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 22
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
playServicesVersion = "17.0.0"
androidMapsUtilsVersion = "0.5+"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.2")
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
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 {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
maven { url 'https://jitpack.io' }
}
}
android/app/build.gradle
apply plugin: "com.android.application"
apply plugin: 'com.google.gms.google-services'
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"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
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.halfy_app"
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
}
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 are e.g. debug, release
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
}
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.facebook.react:react-native:+" // From node_modules
implementation 'com.google.firebase:firebase-analytics:17.2.1'
implementation(project(':react-native-maps')){
exclude group: 'com.google.android.gms', module: 'play-services-base'
exclude group: 'com.google.android.gms', module: 'play-services-maps'
}
implementation 'com.google.android.gms:play-services-base:10.0.1'
implementation 'com.google.android.gms:play-services-maps:10.0.1'
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
project.ext.vectoricons = [
iconFontNames: [ 'MaterialIcons.ttf', 'FontAwesome.ttf' ] // Name of the font files you want to copy
]
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
React Native Version: 0.61