You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native 0.70.6正式APK崩溃:无法加载脚本问题求助

React Native 0.70.6 正式APK崩溃:无法加载脚本问题

开发阶段执行npm run android一切正常,APK构建无报错,但正式APK启动后直接崩溃,捕获到如下错误:

java.lang.RuntimeException: Unable to load script. 
Make sure you're either running Metro (run 'npx react-native start') or that your bundle 'index.android.bundle' is packaged correctly for release.
at com.facebook.react.bridge.CatalystInstanceImpl.jniLoadScriptFromAssets(Native Method)
at com.facebook.react.bridge.CatalystInstanceImpl.loadScriptFromAssets(CatalystInstanceImpl.java:248)
at com.facebook.react.bridge.JSBundleLoader$1.loadScript(JSBundleLoader.java:29)
at com.facebook.react.bridge.CatalystInstanceImpl.runJSBundle(CatalystInstanceImpl.java:277)
at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1402)
at com.facebook.react.ReactInstanceManager.access$1200(ReactInstanceManager.java:136)
at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1108) 
at java.lang.Thread.run(Thread.java:818)

项目相关配置

android/build.gradle

buildscript {
    ext {
        buildToolsVersion = "31.0.0"
        minSdkVersion = 21
        compileSdkVersion = 31
        targetSdkVersion = 31
        if (System.properties['os.arch'] == "aarch64") {
            ndkVersion = "24.0.8215888"
        } else {
            ndkVersion = "21.4.7075529"
        }
        googlePlayServicesAuthVersion = "19.2.0"
        firebaseMessagingVersion = "21.1.0" 
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.2.1")
        classpath("com.facebook.react:react-native-gradle-plugin")
        classpath("de.undercouch:gradle-download-task:5.0.1")
        classpath 'com.google.gms:google-services:4.3.14'
    }
}

allprojects {
    repositories {
        maven {
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }
        mavenCentral {
            content {
                excludeGroup "com.facebook.react"
            }
        }
        google()
        maven { url 'https://www.jitpack.io' }
    }
}

android/app/build.gradle 核心配置

// other code .....
project.ext.react = [
  enableHermes: true,  
  entryFile: "index.js",
  bundleAssetName: "index.android.bundle",
  bundleInDebug: true,
  bundleInRelease: true
]

def enableSeparateBuildPerCPUArchitecture = true
def enableProguardInReleaseBuilds = true

android {
  ndkVersion rootProject.ext.ndkVersion
  compileSdkVersion rootProject.ext.compileSdkVersion

  defaultConfig {
    applicationId "com.myapp"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"
    buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
    multiDexEnabled true
    
    if (isNewArchitectureEnabled()) {
        // We configure the CMake build only if you decide to opt-in for the New Architecture.
        externalNativeBuild {
            cmake {
                arguments "-DPROJECT_BUILD_DIR=$buildDir",
                    "-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
                    "-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
                    "-DNODE_MODULES_DIR=$rootDir/../node_modules",
                    "-DANDROID_STL=c++_shared"
            }
        }
        if (!enableSeparateBuildPerCPUArchitecture) {
            ndk {
                abiFilters (*reactNativeArchitectures())
            }
        }
    }
}

splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk true  // If true, also generate a universal APK
        include (*reactNativeArchitectures())
    }
}
signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword 'android'
        keyAlias 'androiddebugkey'
        keyPassword 'android'
    }
    release {
        if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
            storeFile file(MYAPP_UPLOAD_STORE_FILE)
            storePassword MYAPP_UPLOAD_STORE_PASSWORD
            keyAlias MYAPP_UPLOAD_KEY_ALIAS
            keyPassword MYAPP_UPLOAD_KEY_PASSWORD
        }
    }
}
buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        // Caution! In production, you need to generate your own keystore file.
        signingConfig signingConfigs.release
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
// other code ......
}

Java版本

Openjdk version "18.0.1.1" 2022-04-22
OpenJDK Runtime Environment Homebrew (build 18.0.1.1+0)
OpenJDK 64-Bit Server VM Homebrew (build 18.0.1.1+0, mixed mode, sharing)

已尝试操作:新建纯净RN 0.70.6项目打包正常,但添加依赖后问题重现。


解决方法

1. 手动生成JS Bundle并验证

执行以下命令手动生成release版本的bundle文件:

npx 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/

执行完成后,检查android/app/src/main/assets/目录下是否存在index.android.bundle。如果不存在,说明bundle生成过程有隐藏错误,需查看命令输出排查问题。

2. 修复ProGuard规则

由于启用了ProGuard,需确保proguard-rules.pro中保留React Native和Hermes的核心代码,添加以下规则:

# React Native核心类
-keep class com.facebook.react.** { *; }
-dontwarn com.facebook.react.**

# Hermes引擎相关
-keep class com.facebook.hermes.** { *; }
-dontwarn com.facebook.hermes.**

缺失这些规则会导致ProGuard混淆或删除必要代码,引发脚本加载失败。

3. 定位冲突依赖

因为纯净项目正常,添加依赖后出问题,逐个移除新增依赖,执行./gradlew clean后重新打包测试,找到引发问题的依赖。针对该依赖:

  • 查看其官方文档,确认是否支持RN 0.70.6
  • 检查是否需要额外的打包配置(比如ProGuard规则、bundle参数)

4. 验证Hermes配置

确认以下两点:

  • android/app/build.gradle中enableHermes: true配置正确
  • 解压APK,检查lib/[abi]/目录下是否存在libhermes.so文件,若缺失说明Hermes未正确打包

5. 切换Java版本

RN 0.70.x官方推荐使用Java 11,当前Java 18可能存在兼容性问题。切换到OpenJDK 11后,重新执行打包流程测试。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:55:27