You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Fastlane构建React Native Android App Bundle(.aab)时index.android.bundle加载失败问题排查

React Native Fastlane构建的AAB出现"Unable to load script"错误(Android Studio构建正常)

从你的描述来看,核心矛盾是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解压检查:

  1. 安装bundletool(可从Google官方渠道获取)
  2. 执行命令解压AAB生成APKs:
    bundletool extract-apks --bundle=app-dev-release.aab --output=apks
    
  3. 解压其中一个适配你设备架构的APK,查看assets/react/dev/release/目录下是否存在index.android.bundle。如果不存在,说明Gradle的资源合并步骤没有把bundle复制到最终产物里,需要检查app/build.gradlesourceSets的配置是否包含了生成的assets目录:
    android {
        sourceSets {
            main {
                assets.srcDirs += file("$buildDir/generated/assets/react/").listFiles()
            }
        }
    }
    

总结

优先修复VersionCode的类型错误,这是最可能导致构建异常的原因。如果问题仍存在,再依次检查React配置、Gradle任务指定和AAB内容验证。

内容的提问来源于stack exchange,提问作者HyderA

火山引擎 最新活动