React Native Android发布版启动崩溃:提示Metro未运行
Android Release包启动闪退(提示Metro未运行)问题排查
问题背景
已生成密钥并配置Android签名与构建类型如下:
android { ... signingConfigs { 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 { release { signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } }
执行命令cd android && ./gradlew bundleRelease生成发布包,上传Google Play安装后启动闪退,日志显示Metro未运行;使用npx react-native run-android --variant=release运行也出现相同错误,iOS端无此问题。
可能的解决方案
1. 确认离线Bundle是否正确打包到安装包中
Release模式下应用应使用离线bundle,不依赖Metro服务,闪退提示Metro未运行通常是因为安装包未包含预打包的bundle文件。
- 手动生成离线bundle并重新构建:
执行以下命令生成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/cd android && ./gradlew clean bundleRelease - 检查
android/app/build.gradle中是否配置了自动生成bundle的逻辑,确保release构建会自动包含bundle。
2. 检查ProGuard配置是否破坏了React Native核心代码
如果开启了minifyEnabled,ProGuard可能误删React Native必要类,导致bundle无法加载。在proguard-rules.pro中添加以下规则:
# React Native核心类保护 -keep class com.facebook.react.** { *; } -keep class com.facebook.soloader.** { *; } -keep class com.facebook.jni.** { *; } # 避免不必要的警告 -dontwarn com.facebook.react.** -dontwarn com.facebook.soloader.**
添加后重新构建release包。
3. 检查Release构建的debuggable配置
确保buildTypes.release中debuggable设置为false(默认值为false,若手动修改过可能导致问题),避免应用尝试连接Metro:
buildTypes { release { debuggable false signingConfig signingConfigs.release minifyEnabled enableProguardInReleaseBuilds proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" } }
4. 查看完整崩溃日志
除了"Metro未运行"的提示,通过adb logcat *:E命令获取完整错误日志,排查是否存在MissingResourceException或ClassNotFoundException等更具体的异常,精准定位问题。
内容的提问来源于stack exchange,提问作者Diefair
相关产品推荐
相关产品推荐

