Error: no se puede determinar el carácter actual, no es una cadena, número, matriz u objeto en react-native para Android

9

Cada vez que ejecuto react-native run-android mientras mantengo el emulador en ejecución, aparece este error. react-native run-ios funciona completamente bien.

Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
:ReactNative:Failed to parse React Native CLI configuration: groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object

The current character read is 'E' with an int value of 69
Unable to determine the current character, it is not a string, number, array, or object
line number 1
index number 0
Error: Invalid attribute nameLine: 16Column: 18Char: .    at error (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/sax/lib/sax.js:651:10)    at strictFail (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/sax/lib/sax.js:677:7)    at SAXParser.write (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/sax/lib/sax.js:1313:13)    at new XmlDocument (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/xmldoc/lib/xmldoc.js:261:15)    at readManifest (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/@react-native-community/cli-platform-android/build/config/readManifest.js:38:10)    at Object.projectConfig (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/@react-native-community/cli-platform-android/build/config/index.js:59:46)    at Object.get project [as project] (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/react-native/node_modules/@react-native-community/cli/build/tools/config/index.js:114:50)    at /Users/yashatreya/Desktop/Realyze/Realyze/node_modules/react-native/node_modules/@react-native-community/cli/build/commands/config/config.js:8:452    at Array.forEach (<anonymous>)    at _objectSpread (/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/react-native/node_modules/@react-native-community/cli/build/commands/config/config.js:8:392)
^

FAILURE: Build failed with an exception.

* Where:
Script '/Users/yashatreya/Desktop/Realyze/Realyze/node_modules/@react-native-community/cli-platform-android/native_modules.gradle' line: 201

* What went wrong:
A problem occurred evaluating script.
> Failed to parse React Native CLI configuration. Expected running 'npx --quiet --no-install react-native config' command from '/Users/yashatreya/Desktop/Realyze/Realyze' directory to output valid JSON, but it didn't. This may be caused by npx resolving to a legacy global react-native binary. Please make sure to uninstall any global 'react-native' binaries: 'npm uninstall -g react-native react-native-cli' and try again

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

* Get more help at https://help.gradle.org

Como se indica en el mensaje de error, intenté ejecutar npm uninstall -g react-native react-native-clipero no funcionó.

Información sobre mi entorno:

System:
    OS: macOS 10.15
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
    Memory: 29.68 MB / 8.00 GB
    Shell: 3.2.57 - /bin/bash
  Binaries:
    Node: 12.13.0 - /usr/local/bin/node
    Yarn: 1.19.1 - /usr/local/bin/yarn
    npm: 6.12.0 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.0, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5977832
    Xcode: 11.0/11A420a - /usr/bin/xcodebuild
  npmPackages:
    react: 16.9.0 => 16.9.0 
    react-native: ^0.61.4 => 0.61.4 
  npmGlobalPackages:
    react-native-cli: 2.0.1

android / app / build.gradle a continuación:

apply plugin: "com.android.application"

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.realyze"
        minSdkVersion 21 
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
        multiDexEnabled true

    }
    // rootProject.ext.minSdkVersion
    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 project(':react-native-push-notification')
    implementation project(':react-native-sound')
    implementation project(':react-native-audio')
    implementation 'com.android.support:multidex:2.0.1'
    implementation project(':react-native-gesture-handler')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
    implementation 'com.google.firebase:firebase-analytics:17.2.0'
    implementation 'com.google.firebase:firebase-auth:19.1.0'
    implementation project(path: ":@react-native-firebase_auth")
    implementation project(path: ":@react-native-firebase_messaging")
    implementation project(path: ":@react-native-firebase_database")
    implementation project(':react-native-datetimepicker')
    implementation project(path: ":@react-native-firebase_firestore")
    implementation project(path: ":@react-native-firebase_functions")
}

    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'
}

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
apply plugin: 'com.google.gms.google-services'

android / build.gradle a continuación:


buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:3.4.2"
        classpath 'com.google.gms:google-services:4.3.2'
    }
}

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()
        maven { url 'https://jitpack.io' }
    }
}

Inicialmente recibí este error: error de compilación react-native: no se pudo encontrar la implementación del método () para los argumentos [jscFlavor] en el proyecto ': aplicación' del tipo org.gradle.api.Project, pero ahora estoy obteniendo lo anterior.

yashatreya
fuente
Qué sistema operativo estás usando? Descubrí que mi problema fue causado por los permisos de archivos dentro de las carpetas de compilación de Android; no tengo idea de lo que sucedió, pero en mi máquina con Windows 10 tuve que asegurarme de que comencé todas mis aplicaciones (Android Studio, VS Code, Windows Command) con derechos elevados (Ejecutar como administrador).
Tahir Khalid
Estoy usando MacOS
yashatreya
Recreé el proyecto usando la CLI y comenzó a funcionar :-(
Tahir Khalid
@TahirKhalid ¿Significa que comenzó un proyecto completamente nuevo usando react-native init? ¿Puedes por favor elaborar un poco, gracias?
yashatreya
Sí, recreé el proyecto, pero esta vez me aseguré de que los permisos fueran correctos. Usaría la consola MacOS y cambiaría las carpetas y los archivos para garantizar el acceso correcto de lectura / escritura
Tahir Khalid

Respuestas:

15

SOLUCIÓN 1 (funcionó para mí)

La solución para mí fue eliminar la siguiente línea

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

Asegúrese de eliminarlo en todas partes. Tenía esta línea en build.gradle (aplicación) y también en settings.gradle .

Después de eso, ejecute nuevamente npx react-native run-android, la consola mostrará el error real, reparará el error y volverá a colocar las líneas que había eliminado.

En mi caso, el error ocurrió porque he estado usando una versión de Nodo anterior y la segunda vez sucedió que necesitaba sincronizar mi proyecto nuevamente


SOLUCIÓN 2

Elimine los archivos que estaba encontrando error como "El carácter actual leído es 'E' con un valor int de 69"

Borrando

app\build\intermediates\signing_config\debug\out\signing-config.json

trabajó para otros también.


SOLUCIÓN 3

Actualice @ react-native-community / cli a la última versión.

Buena codificación!

Faustino Gagneten
fuente
La instalación desde nodejs directamente en MacOS también funcionó para mí, ¡gracias! Hacer brew installs, incluso con los pasos de desinstalación y reenlace, no funcionó. Sugiera enmarcar su respuesta para resaltar la descarga de nodejs directamente, y luego tener la solución a continuación.
Kelton.Temby
Resultó que todavía tenía el problema. La solución me ayudó a ver un pequeño error de sintaxis en mi android/app/src/main/AndroidManifest.xmlarchivo. Con eso ahora solucionado, pude volver a encender las otras líneas.
Kelton.Temby
1
Gracias por compartir. ¡Actualizaré la respuesta para que quede más claro!
Faustino Gagneten
@ Kelton.Temby, puedes editar mi respuesta para que sea más clara para otros usuarios como mencionaste.
Faustino Gagneten
3

Creo que este problema solo está en la versión más reciente (0.61). Tuve el mismo problema y acabo de usar la versión anterior (0.60.0)

 npx react-native init AwesomeProject --version 0.60.0
Ali Mohammad
fuente
1

Acabo de quitar la carpeta de compilación dentro de Android y vaya a la carpeta de Android y luego en powershell, escriba ./gradlewclean y luego cd..=>npx react-native run-android

lucas augustus
fuente
0

Asegúrese de que los datos de AndroidManifest.xml estén entre comillas "" no "". Esto generalmente sucede cuando estamos configurando la base de fuego y copiamos y pegamos las dependencias.

vinny
fuente