Skip to content

release 打包之后代码没更新的解决

注意:下面这种方式,即便是首次生成 apk 也是可以使用的!没有问题!

1.先生成 index.android.bundle 文件

一般来说,我们的打包操作是:cd android进入安卓工程目录 ./gradlew assembleRelease开始打包

这里可能会卡在:app:bundleReleaseJsAndAssets 这个状态一直不动(也可能不会),这个时候直接 control + c 放弃打包

首先先在android/app/src/main/下建立assets文件夹!

然后看一下有没有 index.android.js 文件,如果有:

首先我们在项目根目录下执行react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output App/src/main/assets/index.android.bundle --assets-dest App/src/main/res/ 注意:

  1. 需要在根目录执行

  2. 根据版本不同,如果入口配置文件不是 index.android.js,就改为相应的入口文件名,比如‘index.js’

    我们这里新版的是这样生成 index.android.bundle:

    bash
    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
  3. output 的目录应为安卓的目录下,去生成 index.android.bundle 文件,如果目录因版本变化就修改为对应的路径

这样就会生成index.android.bundle文件,然后就可以每次打包都识别到更新了!

image-20240405184326886

重新打包

处理好上面的步骤后,我们进入安卓的工程目录下,输入./gradlew assembleRelease -x bundleReleaseJsAndAssets尝试打包。

新的命令:

bash
./gradlew assembleRelease -x bundleReleaseJsAndAssets

代码更新了 APP 没有变化?

这时我们应该发现 APP 已经打包成功了,但是安装在手机上后发现代码没有更新,这是因为每次打包前都需要生成一个新的 index.android.bundle 文件,这时我们需要进入安卓工程目录,进到/src/main/assets下删除旧的 index.android.bundle 文件,在重复执行react-native bundle --platform android --dev false --entry-file index.js --bundle-output App/src/main/assets/index.android.bundle --assets-dest App/src/main/res/这个步骤,再尝试打包即可

也就是说,每次都必须要先删除 index.android.bundle,然后再重新生成 index.android.bundle 文件

而且最好是先./gradlew clean 一下,然后再删除再生成,再打包!每个步骤都不能少!

总结:

bash
新建 android/app/src/main/assets 文件夹
delete index.android.bundle(手动)
cd ..
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 assembleRelease -x bundleReleaseJsAndAssets

打包报错:Execution failed for task ':app:mergeReleaseResources'

解决办法:

build.gradle(android/app 下面的)的 defaultConfig 配置项中添加:

aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
json
android {
    compileSdkVersion 30
    buildToolsVersion '30.0.3'
    defaultConfig {
        applicationId "xxxx"
        minSdkVersion 21
        targetSdkVersion 30

        //解决Execution failed for task ':app:mergeReleaseResources'.
        aaptOptions.cruncherEnabled = false
        aaptOptions.useNewCruncher = false
    }
}