我想在没有react-packager服务器的情况下生成unsigned app-release.apk。 我正在运行以下命令。
cd react-native-project-dir
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-dest机器人/应用/ SRC /主/ RES /
在以下命令之后,我在命令提示符中收到错误,如下所示:
cd android&& gradlew assemblerelease
应用程式:processReleaseManifestessReleaseManifest
:应用程序: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 FAILED
失败:构建因异常而失败。
- 出了什么问题: 任务':app:processReleaseResources'执行失败。 com.android.ide.common.process.ProcessException:无法执行aapt
我无法生成app-release.apk,也无法理解为什么image_background_unique_2.jpg文件会在不同的文件夹中添加两次。
答案 0 :(得分:18)
问题是新版本的react-native捆绑了/ app / build / intermediates / res / merged / release下的资产而不是app / src / main / res
要解决它,这就是我所做的
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
答案 1 :(得分:8)
我尝试按照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。
答案 2 :(得分:0)
您似乎已将自己的应用捆绑在一起并使用assembleDebug
将其安装到手机中。当您决定转到assembleRelease
时,您应该删除drawable-
个文件夹。当您决定生成.apk文件时,它们会以某种方式产生问题。
答案 3 :(得分:0)
您是否尝试过本机清洁版本?尝试重置缓存然后捆绑。也许它会解决这个问题。
答案 4 :(得分:0)
我已设法通过删除本机/android/app/build/intermediates/res/merged/release/drawable-mdpi
答案 5 :(得分:0)
首先输入以下命令删除可能导致此错误的所有文件夹:
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
答案 6 :(得分:0)
这对我有用
将以下代码添加到文件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内部= task.create(...
找到了此解决方案答案 7 :(得分:0)
您可以做一件事进行调试,以使React Native Bundle在命令下运行
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/