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

Expo构建的React Native安卓应用启动崩溃(iOS运行正常)排查求助

Expo构建的React Native安卓应用启动崩溃(iOS运行正常)排查求助

这种安卓启动直接崩但Expo Go完全正常的情况确实闹心,从你提到的java.lang.ClassNotFoundException来看,基本可以锁定是包名配置不一致或者Expo自动生成的安卓Manifest里Activity映射出错导致的,给你梳理几个实战排查方向:

  • 先死磕包名的一致性!
    安卓对包名的严谨性远超过iOS,这是最常见的坑:

    • 核对app.config.js(或app.json)里的expo.android.package字段,和package.json里的name字段,必须完全一致(注意大小写!安卓包名区分大小写,iOS不敏感)
    • 包名只能用小写字母、数字、点、下划线,绝对不能以数字开头,比如com.yourapp.myapp是合法的,123.myapp或者MyApp.yourapp都会出问题
  • 检查Expo主Activity配置
    如果你没有手动修改过安卓Manifest(非eject状态),Expo默认的主Activity是host.exp.exponent.MainActivity,别乱改这个!

    • 要是你自定义过android/app/src/main/AndroidManifest.xml,立刻检查主Activity的android:name是不是正确的,别改成了自己没实现的自定义Activity
    • 先清缓存再构建:运行expo r -c清除本地缓存,然后重新执行构建命令(expo build:android或者eas build -p android),很多时候旧缓存会导致配置不生效
  • EAS Build用户额外检查
    如果你用的是EAS Build,别漏了eas.json

    • 确认eas.json里安卓构建配置的applicationIdapp.config里的package字段完全匹配
    • 构建时加--clear-cache参数,强制清空远程构建缓存,避免旧配置残留
  • 手动验明正身:解压APK看配置
    把构建好的APK解压(用普通解压工具就行),找到AndroidManifest.xml(可以用AXMLPrinter2转成可读格式),重点看:

    • package属性的值是不是和你配置的一致
    • 主Activity的android:name是不是正确的Expo默认Activity,或者和你的包名路径对应
      也可以用命令行快速看:aapt dump badging 你的APK文件.apk,输出里找package: name='xxx'launchable-activity: name='xxx',确认两者的包名部分完全匹配
  • 排查第三方Config Plugin的锅
    有些第三方库的config plugin会偷偷修改安卓Manifest,比如推送、支付、地图类的插件,可能不小心覆盖了主Activity配置:

    • 先临时把app.config里所有第三方plugins都注释掉,只保留Expo核心的,然后重新构建测试
    • 如果不崩溃了,再逐个加回插件排查,找到搞事情的那个
  • 挖更深的日志
    你已经用了logcat,可以再精准过滤日志:

    • 运行adb logcat *:E只看错误级别的日志,找崩溃发生前的前置错误
    • 或者按包名过滤:adb logcat | grep 你的包名,这样能聚焦到你的应用相关的日志,更容易找到根因

如果以上步骤都试过还是没解决,建议把打码后的app.config.js核心配置、package.jsonname字段,还有完整的logcat错误栈贴出来,这样大家能更快帮你定位问题!

火山引擎 最新活动