React Native 0.71.7 Android构建如何跳过打包?
React Native 0.71.7 Android 手动预生成Bundle构建解决方案
核心问题
升级后原bundleInRelease配置被移除,Gradle插件默认依赖自动打包任务,导致手动预生成bundle后无法正常执行buildRelease。
可行解决方法
方法一:修改Gradle任务依赖与资源配置
在android/app/build.gradle中添加以下配置,直接禁用自动打包任务,并让资源合并任务读取预生成的bundle和资源文件:
react { enableHermes = true // 根据你的项目实际配置调整(true/false) bundleAssetName = "index.android.bundle" // 指定预生成bundle和资源的目录(需与你手动打包的输出路径一致) bundleOutputDirectory = file("$projectDir/src/bundle/assets") resourcesOutputDirectory = file("$projectDir/src/bundle/res") } // 调整mergeReleaseAssets任务,移除对自动打包任务的依赖,直接读取预生成bundle tasks.named('mergeReleaseAssets') { dependsOn null from("$projectDir/src/bundle/assets") { include react.bundleAssetName } } // 调整mergeReleaseResources任务,读取预生成的资源文件 tasks.named('mergeReleaseResources') { dependsOn null from("$projectDir/src/bundle/res") { include '**/*' } } // 完全禁用自动打包任务 tasks.named('createBundleReleaseJsAndAssets') { enabled = false }
方法二:通过Gradle属性控制打包行为
在项目根目录的gradle.properties中添加自定义属性,然后在android/app/build.gradle中根据该属性决定是否执行打包任务:
- gradle.properties中添加:
skipBundleBuild=true
- android/app/build.gradle中配置:
react { enableHermes = true bundleAssetName = "index.android.bundle" } // 根据属性判断是否禁用打包任务 if (project.hasProperty("skipBundleBuild") && project.property("skipBundleBuild") == "true") { tasks.named('createBundleReleaseJsAndAssets') { enabled = false } tasks.named('mergeReleaseAssets') { from("$projectDir/src/bundle/assets") { include react.bundleAssetName } } tasks.named('mergeReleaseResources') { from("$projectDir/src/bundle/res") { include '**/*' } } }
手动生成Bundle的命令
确保你手动打包的命令输出路径与上述配置一致:
react-native bundle \ --platform android \ --dev false \ --entry-file index.js \ --bundle-output android/app/src/bundle/assets/index.android.bundle \ --assets-dest android/app/src/bundle/res
执行构建命令
完成上述配置后,直接执行:
./gradlew buildRelease
内容的提问来源于stack exchange,提问作者joshweir
相关产品推荐
相关产品推荐

