Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot build react-native project from Android-Studio

I can run my react-native project. It works fine. I have tested by running using react-native. But when I'm trying to run it with Android studio I get the following error.

*FAILURE: Build failed with an exception.
* Where:
Script 'D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\@react-native-community\cli-platform-android\native_modules.gradle' line: 195
* What went wrong:
A problem occurred evaluating settings 'employeeMobile'.
> 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: EPERM: operation not permitted, scandir 'D:/EmployeeApp/EmployeeMobileAppGit/employeemobile-app/android/app/build/intermediates/signing_config/debug/out/signing-config.json'    at Object.readdirSync (fs.js:790:3)    at GlobSync._readdir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:288:41)    at GlobSync._readdirInGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:267:20)    at GlobSync._readdir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:276:17)    at GlobSync._processReaddir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:137:22)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:132:10)    at GlobSync._processGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:380:10)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:130:10)    at GlobSync._processGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:383:10)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:130:10)
  ^
* 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
BUILD FAILED in 3s
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: EPERM: operation not permitted, scandir 'D:/EmployeeApp/EmployeeMobileAppGit/employeemobile-app/android/app/build/intermediates/signing_config/debug/out/signing-config.json'    at Object.readdirSync (fs.js:790:3)    at GlobSync._readdir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:288:41)    at GlobSync._readdirInGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:267:20)    at GlobSync._readdir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:276:17)    at GlobSync._processReaddir (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:137:22)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:132:10)    at GlobSync._processGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:380:10)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:130:10)    at GlobSync._processGlobStar (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:383:10)    at GlobSync._process (D:\EmployeeApp\EmployeeMobileAppGit\employeemobile-app\node_modules\glob\sync.js:130:10)
^
10:38:38 AM: Task execution finished.*

My project Gradle file is as follows.

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext {
        buildToolsVersion = "28.0.3"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        // 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()
    }
}

My app/Gradle file is as follows.

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"
/**
 * 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.employeemobile"
        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'
        }
          release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    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
            signingConfig signingConfigs.release
            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
            }
        }
    }
    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'
    }
}
dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules
    if (enableHermes) {
      def hermesPath = "../../node_modules/hermesvm/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)
like image 435
Ishara Sandun Avatar asked Jul 25 '19 05:07

Ishara Sandun


People also ask

Can I develop React Native in Android Studio?

You will need Node, the React Native command line interface, a JDK, and Android Studio. While you can use any editor of your choice to develop your app, you will need to install Android Studio in order to set up the necessary tooling to build your React Native app for Android.

Is Android SDK required for React Native?

Android Studio installs the latest Android SDK by default. React Native requires Android 6.0 (Marshmallow) SDK or higher. We recommend using the latest SDK.


2 Answers

I think it's some permission problem. Run Cmd as admin then manually delete the files:

app/android/app/build/intermediates/signing_config/debug/out/signing-config.json
app/android/app/build/intermediates/signing_config/release/out/signing-config.json

solved the problem for me

like image 81
al1812 Avatar answered Oct 08 '22 14:10

al1812


Delete signing-config.json from \app\build\intermediates\signing_config\debug\out Then File->invalidate cache and restart. This worked for me.

like image 4
Arpan Patel Avatar answered Oct 08 '22 14:10

Arpan Patel