./gradlew assembleRelease
を実行すると、ビルドが次のエラーで失敗します:
Error:Execution failed for task ':app:bundleReleaseJsAndAssets. > A problem occurred starting process 'command 'node'
インターネットで検索して、それに関するいくつかのトピックを見つけましたが、問題を解決できませんでした。
React-Nativeバージョン:0.54.0
編集:
今、Android Studioの代わりに端末から./gradlew assembleRelease --info
を実行していますが、別のエラーが表示されます。
結果は次のとおりです。
> 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フォルダーを探しているのかわかりません。
最初:
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
あなたは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
これを試して。それがあなたを助けることを願っています。
./gradlew --stop
を使用してから./gradlew assembleRelease
を使用するだけでうまくいきました。
これは私のために働いています、以下の手順に従ってください:
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 app build gradleを更新します
project.ext.react = [
nodeExecutableAndArgs : ["/usr/local/bin/node"]
];
)Get Node details
$ which node
>(結果は「/usr/username/.nvm/versions/node/v10.7.0/bin/node」のようになります)
4)リンクノード(非常にimpステップは、ステップ3の上記の結果をコピーします)
- ln -s /usr/username/.nvm/versions/node/v10.7.0/bin/node /usr/local/bin/node
5)ステップ4戻りファイルが存在する場合-フォルダー/ usr/local/bin /に移動して「ノード」ファイルを削除し、ステップ-4を再度実行します。
6)ステップ-4が正常に実行されると、このノードの問題は解決されます。
私は今これが遅れています。これは誰かを助けるかもしれません。
私にとっては、最新のreact-native-sentry
。
apply from: "../../node_modules/react-native-sentry/sentry.gradle"
問題を引き起こしていた
上記の手順は本当に役に立ちました。
react-native 0.55.3
で機能するスクリプトを次に示します。
Android-build
コマンドをローカルまたはCIで実行して、APKを生成します。
/ packages.json(react-native):
"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-react-gradle-fix
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"
}
間違った画像サイズ(つまり、image @ 5x.png)を使用していたため、この問題が発生しました。その[email protected]ファイルを削除すると...うまくいきました!!
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
また、 this ;に従って本番ビルド用に追加することもできます。
--minify true
RNのソース から取得
注:CIリソースは少ない数(mem&cpu)に制限されているため、CIリソースを使い果たすことのない--max-workers 1
を追加しました。