weex_js_connection.cpp报spinWaitPeer timeout是Weex Core与Native进程未连上的底层信号,需降级NDK至r21e、Gradle插件严格用4.2.1、targetSdkVersion设为28,并检查pages.json首页路径正确性及manifest.json中iOS的h5.base配置为"./"。

weex_js_connection.cpp 报 spinWaitPeer timeout 怎么办
这是离线打包白屏最典型的底层信号,不是你的页面或 JS 逻辑出错,而是 Weex Core 和 Native 进程根本没连上。Android Studio 4.2.1 及其配套的 Gradle 6.7.1、NDK r21e 组合下尤其高频。
关键动作是降级或对齐环境:
-
ndk必须用r21e(不是 r23+),新版 NDK 移除了某些 IPC 机制,Weex 会直接卡死 -
build.gradle中com.android.tools.build:gradle版本必须严格等于4.2.1,高了低了都会触发 sender is null -
targetSdkVersion设为28,别用 30 或 33——SDK 30+ 的进程隔离策略会让 Weex 的多进程初始化失败
pages.json 首页路径写错会导致白屏吗
会,而且不报 JS 错误,只留白屏。UniApp 离线包启动时,原生容器会按 pages.json 第一项的 path 去加载 JS bundle,路径错、拼写错、大小写错、漏写 pages/ 前缀,全都会静默失败。
检查要点:
- 确认
pages.json第一个page的path字段是完整相对路径,比如"pages/index/index",不能是"index"或"./pages/index/index" - 对应目录下必须存在
index.vue(或index.nvue),且文件名大小写与路径完全一致(iOS 对大小写敏感) - 如果用了分包,主包
pages.json里不能只写分包路径,首页必须落在主包内
manifest.json 的 h5.router.base 配置影响离线包吗
不影响 Android,但会影响 iOS 离线包——尤其是首次冷启动白屏。iOS 的 WKWebView 加载 index.html 时,若 base 配置错误,所有 static/、common/ 资源路径都会 404,JS 拿不到 framework.js 就无法初始化。
正确配置只有两种:
- iOS 离线包:在
manifest.json的h5节点下设"base": "./"(注意是字符串"./",不是"/") - Android 离线包:这个字段可忽略,它只被 H5 和 iOS 离线环境读取
- 如果同时支持双端,就统一写
"./",Android 会自动跳过
adb logcat 看不到 weex 相关日志怎么办
说明日志输出被过滤或进程没起来。Weex 日志默认打在 weex、WeexCore、WebCore 这几个 tag 下,但有些设备或 AS 版本会屏蔽。
执行这三条命令组合排查:
-
adb logcat -s "weex" "WeexCore" "WebCore"—— 精准抓 Weex 相关 -
adb logcat | grep -i "spinwait\|sender\|framework\.js"—— 全局搜关键词 -
adb logcat -v color—— 开颜色模式,红色错误更醒目,避免漏掉关键行
真机上看不到日志?先确认 USB 调试已开,再拔插一次线,有时 adb server 会卡住。模拟器上看到日志但真机没有,基本可以断定是 ABI 或 SDK 版本导致的初始化提前崩溃——进程都没活过 log 输出阶段。


















