Подтвердить что ты не робот

React-Native assembleRelease не работает для задачи: app: bundleReleaseJsAndAssets '

Когда я запускаю ./gradlew assembleRelease с этой ошибкой:

Error:Execution failed for task ':app:bundleReleaseJsAndAssets. 
> A problem occurred starting process 'command 'node'

Я искал в Интернете и нашел несколько тем об этом, но я не мог решить свою проблему.

React-Native версия: 0.54.0

РЕДАКТИРОВАТЬ:
Теперь я запускаю ./gradlew assembleRelease --info с терминала вместо Android Studio, и я получаю другую ошибку.
Вот результат:

> Task :app:processReleaseResources
Putting task artifact state for task ':app:processReleaseResources' into context took 0.007 secs.
file or directory '**/android/app/libs', not found
file or directory '**/node_modules/appcenter-crashes/android/libs', not found
file or directory '**/node_modules/appcenter-analytics/android/libs', not found
file or directory '**/node_modules/appcenter/android/libs', not found
file or directory '**/node_modules/react-native-interactable/lib/android/libs', not found
file or directory '**/node_modules/react-native-navigation/android/app/libs', not found
file or directory '**/android/app/libs', not found
file or directory '**/node_modules/appcenter-crashes/android/libs', not found
file or directory '**/appcenter-analytics/android/libs', not found
file or directory '**/node_modules/appcenter/android/libs', not found
file or directory '**/node_modules/react-native-interactable/lib/android/libs', not found
file or directory '**/node_modules/react-native-navigation/android/app/libs', not found
Executing task ':app:processReleaseResources' (up-to-date check took 0.035 secs) due to:
  Task has failed previously.
All input files are considered out-of-date for incremental task ':app:processReleaseResources'.
Unable do incremental execution: full task run
file or directory '**/android/app/libs', not found
file or directory '**/node_modules/appcenter-crashes/android/libs', not found
file or directory '**/node_modules/appcenter-analytics/android/libs', not found
file or directory '**/node_modules/appcenter/android/libs', not found
file or directory '**/node_modules/react-native-interactable/lib/android/libs', not found
file or directory '**/node_modules/react-native-navigation/android/app/libs', not found
file or directory '**/android/app/libs', not found
file or directory '**/node_modules/appcenter-crashes/android/libs', not found
file or directory '**/node_modules/appcenter-analytics/android/libs', not found
file or directory '**/node_modules/appcenter/android/libs', not found
file or directory '**/node_modules/react-native-interactable/lib/android/libs', not found
file or directory '**/node_modules/react-native-navigation/android/app/libs', not found
Aapt2QueuedResourceProcessor is using **/Android/sdk/build-tools/26.0.2/aapt2
Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute aapt
*
*
*
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processReleaseResources'.
> Failed to execute aapt


Кажется, gradle ищет папку libs во всех модулях, но в модулях узла нет папок libs. Это правда, но я не знаю, почему gradle ищет папку libs.

4b9b3361

Ответ 1

Первый:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

наконец построить:

./gradlew assembleRelease -x bundleReleaseJsAndAssets

Ответ 2

Похоже, вы не создали пакет js, поэтому сначала сделайте пакет, используя команду: -

 react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

затем в вашем каталоге проекта

 cd android 

Очистите свой град

 ./gradlew clean

и сделать сборку окончательно

./gradlew assembleDebug

Попробуй это. Надеюсь, это поможет вам.

Ответ 3

Просто с помощью ./gradlew --stop а затем ./gradlew assembleRelease работал для меня.

Ответ 4

Это работает для меня, пожалуйста, выполните следующие действия: -

1) Хватит бегать Gradle

 $ cd RectNatoveProjectName & cd android  (Open your project and go to android folder)  
 $ ./gradlew --stop (Run this command to stop old running Gradle service )

2) Обновите приложение для сборки приложений для Android

project.ext.react = [
        nodeExecutableAndArgs : ["/usr/local/bin/node"]
];

3) Получить детали узла

$ which node 

> (Результат будет выглядеть как "/usr/username/.nvm/versions/node/v10.7.0/bin/node")

4) Узел связи (очень бесшабашный шаг, скопируйте приведенный выше результат в шаге 3)

- ln -s /usr/username/.nvm/versions/node/v10.7.0/bin/node /usr/local/bin/node

5) Если существует возвращаемый файл шага 4, перейдите в папку /usr/local/bin/, удалите файл "node" и снова выполните шаг -4.

6) Если шаг 4 успешно выполнен, проблема с узлом будет решена.

Ответ 5

Шаги выше действительно помогли.

Вот сценарии, которые работают для нас с react-native 0.55.3.

Запустите команду android-build локально или CI, чтобы создать APK.

/packages.json (реагировать-нативный):

"android-bundle": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res",
"android-release-fix": "node ./android-release-gradle-fix.js",
"android-build": "yarn killbin && yarn android-clean && yarn android-release-fix && yarn android-bundle && cd android && ./gradlew assembleRelease -x bundleReleaseJsAndAssets --info",
"android-clean": "cd android && ./gradlew clean",
"killbin": "rm -rf ./node_modules/.bin",

android-release-gradle-fix.js:

const fs = require('fs')

// Fix issues with Android resources like duplicate files
// CI: run install with --unsafe-perm option
// https://stackoverflow.com/questions/47084810/react-native-android-duplicate-file-error-when-generating-apk
try {
        var curDir = __dirname
        var rootDir = process.cwd()

        var file = '${rootDir}/node_modules/react-native/react.gradle'
        var dataFix = fs.readFileSync('${curDir}/android-react-gradle-fix', 'utf8')
        var data = fs.readFileSync(file, 'utf8')

        var doLast = "doLast \{"
        if (data.indexOf(doLast) !== -1) {
            throw "Already fixed."
        }

        var result = data.replace(/                \/\/ Set up inputs and outputs so gradle can cache the result/g, dataFix);
        fs.writeFileSync(file, result, 'utf8')
        console.log('Done')
    } catch (error) {
        console.error(error)
    }

Android реагируют-Gradle-исправление

doLast {
    def moveFunc = { resSuffix ->
        File originalDir = file("${resourcesDir}/drawable-${resSuffix}")
        if (originalDir.exists()) {
            File destDir = file("${resourcesDir}/drawable-${resSuffix}-v4")
            ant.move(file: originalDir, tofile: destDir)
        }
    }
    moveFunc.curry("ldpi").call()
    moveFunc.curry("mdpi").call()
    moveFunc.curry("hdpi").call()
    moveFunc.curry("xhdpi").call()
    moveFunc.curry("xxhdpi").call()
    moveFunc.curry("xxxhdpi").call()
}

// Set up inputs and outputs so gradle can cache the result

/android/build.gradle:

buildscript {
    ext {
        buildToolsVersion = "27.0.3"
        minSdkVersion = 21
        compileSdkVersion = 27
        targetSdkVersion = 27
        supportLibVersion = "27.1.1"
        googlePlayServicesVersion = "15.0.1"
        androidMapsUtilsVersion = "0.5+"
    }
...
subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 27
                buildToolsVersion '27.0.3'
            }
        }
    }
}

/android/app/build.gradle:

dependencies {
    implementation project(':amazon-cognito-identity-js')
    implementation project(':appcenter-push')
    implementation project(':react-native-fbsdk')
    implementation(project(':react-native-google-signin')) {
        exclude group: "com.google.android.gms" // very important
    }
    implementation project(':react-native-image-picker')
    implementation project(':react-native-vector-icons')
    implementation project(':react-native-sentry')
    implementation project(':react-native-maps')
    implementation "com.google.android.gms:play-services-auth:$googlePlayServicesVersion" // Google signin
    implementation project(':react-native-sentry')
    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:$googlePlayServicesVersion"
    implementation "com.google.android.gms:play-services-maps:$googlePlayServicesVersion"
    implementation "com.google.firebase:firebase-core:15.0.2"
    implementation "com.google.firebase:firebase-messaging:15.0.2"
    implementation project(':react-native-vector-icons')
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "com.android.support:appcompat-v7:$supportLibVersion"
    implementation 'com.facebook.react:react-native:+'
    // implementation "com.android.support:$supportLibVersion"
}

Ответ 6

Я сейчас это поздно. может быть, это кому-нибудь поможет.

Для меня это я должен был обновить до последней версии react-native-sentry.

apply from: "../../node_modules/react-native-sentry/sentry.gradle"

вызывал проблему

Ответ 7

Я использовал неправильный размер изображения (например, [email protected]), что вызвало у меня эту проблему. Когда я удалил этот файл [email protected] он работал !!

Ответ 8

Начиная с RN 0,58, для сборок CI команды выглядят следующим образом:

Сначала создайте каталоги:

mkdir -p app/build/generated/assets/react/production/release/&& mkdir -p app/build/generated/res/react/production/release

Следующий:

node../node_modules/react-native/local-cli/cli.js bundle --platform android --dev false --entry-file index.android.js --bundle-output app/build/generated/assets/react/production/release/index.android.bundle --assets-dest app/build/generated/res/react/production/release --max-workers 1 --reset-cache

Также вы можете добавить свои производственные сборки в соответствии с этим;

--minify true

Взято из источника РН

ПРИМЕЧАНИЕ: мы добавили --max-workers 1 чтобы не истощать ресурсы CI, поскольку они ограничены меньшими числами (mem & cpu).