Fastlane构建React Native Android App Bundle(.aab)时index.android.bundle加载失败问题排查
从你的描述来看,核心矛盾是Android Studio打包的AAB能正常运行,但Fastlane构建的同版本AAB下载后却找不到index.android.bundle——虽然Fastlane日志明确显示bundle已生成,且资源合并任务在bundle复制之后执行。结合你的RN版本(0.63.4)、Gradle版本(4.1.1)和Fastfile代码,我梳理了几个最可能的原因和对应的解决方案:
1. 最可能的根源:VersionCode设置错误
你的Fastfile里有一个明显的问题:android_set_version_code使用了package["versionName"]作为参数,但VersionCode必须是整数类型,而package.json里的version是字符串格式(比如1.2.3)。这个错误会导致Gradle构建流程异常,虽然表面上bundle生成了,但实际打包进AAB时可能出现资源丢失或路径错误。
修复方案:
把VersionCode设置改为你自己定义的getVersionCode()方法的返回值:
# 替换原来的android_set_version_code行 android_set_version_code( version_code: getVersionCode() )
2. 确保Dev Flavor的Release模式正确打包Bundle
RN默认只在标准Release flavor下打包bundle,但你使用的是dev flavor的Release构建,需要确认app/build.gradle里的React配置开启了bundleInDev:
project.ext.react = { enableHermes: false, // 根据你的需求调整 bundleInRelease: true, bundleInDev: true, // 关键:确保dev flavor的Release构建也会打包bundle // 其他配置... }
3. 显式指定Fastlane执行的Gradle任务
有时候Fastlane调用bundle任务时,可能存在依赖顺序的隐性问题(虽然日志显示bundleJsAndAssets执行了,但可能没有被正确关联到最终的bundle任务)。可以显式指定要执行的任务列表,确保bundle生成和资源合并的顺序绝对正确:
gradle( task: 'bundle', flavor: "dev", build_type: "Release", include_tasks: [":app:bundleDevReleaseJsAndAssets", ":app:bundleDevRelease"], properties: { "android.injected.signing.store.file" => Dir.pwd + "/release.keystore", "android.injected.signing.store.password" => options[:RELEASE_KEYSTORE_PASSWORD], "android.injected.signing.key.alias" => options[:RELEASE_KEYSTORE_ALIAS], "android.injected.signing.key.password" => options[:RELEASE_KEYSTORE_KEY_PASSWORD], "vname" => package["version"] } )
4. 验证AAB中的Bundle是否存在
为了彻底确认bundle是否真的被打包进AAB,可以用bundletool解压检查:
- 安装bundletool(可从Google官方渠道获取)
- 执行命令解压AAB生成APKs:
bundletool extract-apks --bundle=app-dev-release.aab --output=apks - 解压其中一个适配你设备架构的APK,查看
assets/react/dev/release/目录下是否存在index.android.bundle。如果不存在,说明Gradle的资源合并步骤没有把bundle复制到最终产物里,需要检查app/build.gradle中sourceSets的配置是否包含了生成的assets目录:android { sourceSets { main { assets.srcDirs += file("$buildDir/generated/assets/react/").listFiles() } } }
总结
优先修复VersionCode的类型错误,这是最可能导致构建异常的原因。如果问题仍存在,再依次检查React配置、Gradle任务指定和AAB内容验证。
内容的提问来源于stack exchange,提问作者HyderA




