Expo SDK47升级:bundled expo-cli返回的manifest无法被expo-dev-launcher解析
问题场景
升级到 Expo SDK 47 后,按照官方建议使用项目 bundled 的 expo-cli(通过 npx expo start --dev-client 启动),Android 应用选择开发服务器时抛出如下错误:
Value ----------------------------224819657222108214122421 of type java.lang.String cannot be converted to JSONObject
手动访问开发服务器的 manifest 地址(如 http://192.168.0.146:8081/?platform=android),发现返回内容开头带有多部分表单数据分隔符;但切换回全局安装的 expo-cli 执行 expo-cli start 时,manifest 是纯 JSON 格式,应用可正常加载。
可能原因
Bundled expo-cli 在部分环境下(比如存在本地代理/HTTP 抓包工具、项目依赖版本不匹配、缓存异常),错误地以 multipart/form-data 格式返回 manifest,而 Android Dev Client 仅能解析纯 JSON 格式的 manifest 响应。
解决方法
清除 Expo 缓存后重启服务
执行命令强制清除缓存,避免旧缓存导致的格式异常:npx expo start --dev-client --clear关闭本地 HTTP 拦截工具
停用 Fiddler、Charles 这类抓包工具,或者检查系统代理设置,确保没有拦截修改 Expo 服务器的响应内容格式。锁定 expo-cli 版本与 SDK 47 匹配
在项目package.json的devDependencies中明确指定兼容 SDK 47 的 expo-cli 版本(如^6.0.0),执行npm install后再启动服务:{ "devDependencies": { "expo-cli": "^6.0.0" } }强制指定 manifest 返回格式
部分版本的 expo-cli 支持通过参数强制返回 JSON 格式的 manifest,尝试执行:npx expo start --dev-client --manifest-type=json检查 expo-updates 配置
确认项目app.json或app.config.js中的updates配置无异常,比如url指向正确,没有额外的请求头设置导致响应格式变化。
内容的提问来源于stack exchange,提问作者Charlie

