在react-native android中的gradlew assembleRelease命令没有生成app-release.apk

时间:2017-07-14 07:07:37

标签: android android-studio react-native

我想在没有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文件会在不同的文件夹中添加两次。

8 个答案:

答案 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 assembleReleaseassembleRelease似乎会导致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(...

在这里https://github.com/facebook/react-native/issues/5787

找到了此解决方案

答案 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/