私は、react-packagerサーバーなしで署名のないapp-release.apkを生成したいと思います。そのために次のコマンドを実行しています。
cd反応ネイティブプロジェクトディレクトリ
反応ネイティブバンドル-プラットフォームAndroid --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android。バンドル--assets-dest Android/app/src/main/res /
次のコマンドの後、次のようなコマンドプロンプトでエラーが発生します。
cd Android && gradlew assemblyrelease
app:processReleaseManifestessReleaseManifest
:app:processReleaseResources D:\ ReactNativeProject\Android\app\build\intermediates\res\merged\release\drawable-mdpi-v4\image_background_unique_2.jpg:エラー:ファイルが重複しています。 D:\ ReactNativeProject\Android\app\build\intermediates\res\merged\release\drawable-mdpi\image_background_unique_2.jpg:オリジナルはこちらです。バージョン修飾子が暗示される場合があります。 :app:processReleaseResourcesが失敗しました
失敗:ビルドは例外で失敗しました。
- 問題の原因:タスク ':app:processReleaseResources'の実行に失敗しました。 com.Android.ide.common.process.ProcessException:aaptの実行に失敗しました
また、app-release.apkを生成できず、image_background_unique_2.jpgファイルが異なるフォルダーに2回追加される理由がわかりません。
https://facebook.github.io/react-native/docs/signed-apk-Android.html の手順に従って署名済みAPKを生成し、署名済みAPKを生成しようとしました。
同じ問題がありました。 error: Duplicate file
を実行すると、一部の画像で./gradlew assembleRelease
が表示されました。 assembleRelease
はdrawable-
フォルダでいくつかの問題を引き起こすようです。 drawable-
からすべての/Android/app/src/main/res/
フォルダを削除しました。次に、。/ gradlew AssembleReleaseを再度実行しました。最後に、/Android/app/build/outputs/apk/
で署名済みAPKを生成しました。
問題は、新しいバージョンのreact-nativeがapp/src/main/resではなく/ app/build/intermediates/res/merged/releaseにアセットをバンドルすることです。
それを解決するために、これは私がやったことです
rm -rf Android/app/src/main/res/drawable-*
次のコマンドを使用してアセットをバンドルします。
react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/build/intermediates/res/merged/release/
更新された--assets-dest
上記のコマンドで。 APKの組み立てはその後正常に機能しました!
react-native run-Android --variant=release
アプリをバンドルし、assembleDebug
を使用してスマートフォンにインストールしたようです。 assembleRelease
に移動することを決定したら、drawable-
フォルダーを削除する必要があります。 .apkファイルを作成する場合、問題が発生します。
反応ネイティブクリーンビルドを試しましたか?キャッシュをリセットしてからバンドルしてみてください。多分それはこの問題を解決します。
これは私のために働いた
次のコードをファイルnode_modules/react-native/react.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()
}
内部def currentBundleTask = tasks.create(...
ここでこの解決策を見つけました https://github.com/facebook/react-native/issues/5787
ネイティブの/Android/app/build/intermediates/res/merged/release/drawable-mdpi
でフォルダーの重複を削除することで、この問題を解決することができました
最初に、次のように入力して、このエラーの原因となる可能性のあるすべてのフォルダを削除します。
rm -rf ./Android/app/build/intermediates/res/merged/release/drawable-*
次に、mdpiをmdpi-v4に変更します。
./node_modules/react-native/local-cli/bundle/assetPathUtils.js
function getAndroidAssetSuffix(scale) {
switch (scale) {
case 0.75: return 'ldpi';
case 1: return 'mdpi-v4';
case 1.5: return 'hdpi';
case 2: return 'xhdpi';
case 3: return 'xxhdpi';
case 4: return 'xxxhdpi';
}
}
次に、オフラインインクルードをバンドルします。
react-native bundle --platform Android --dev false --entry-file index.Android.js --bundle-output Android/app/src/main/assets/index.Android.bundle --assets-dest Android/app/build/intermediates/res/merged/release/
最後に、アプリのリリースバージョンをビルドします。
cd ./Android && ./gradlew assembleRelease
コマンドの下でネイティブバンドルを実行するようにデバッグするために1つのことを行うことができます
react-native bundle --assets-dest ./Android/app/src/main/res/ --entry-file ./index.js --bundle-output ./Android/app/src/main/assets/index.Android.bundle --platform Android --dev true
リリースの場合:
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/build/intermediates/res/merged/release/