离线打包时三处id必须完全一致:unpackage/resources/文件夹名、dcloud_control.xml中值、manifest.json的"appid"字段,任意大小写、下划线差异均导致资源检测失败并中断打包。

uni-app 离线打包时默认会校验三个 ID 是否一致(__uni__123456 类似格式),一旦不匹配就直接中断打包并报错,**这个检测无法关闭**——它不是可开关的配置项,而是离线打包引擎启动前的硬性准入检查。
为什么打包会卡在“资源检测失败”
这不是 warning,是 fatal error。引擎在加载 assets/apps/__UNI__xxxxxx.www 前,必须确认三处 ID 完全一致:
-
unpackage/resources/下生成的文件夹名(如__UNI__a1b2c3) -
assets/data/dcloud_control.xml中<hbuilder>__UNI__a1b2c3</hbuilder> -
manifest.json里"appid"字段值(注意:必须是带双下划线的完整字符串,大小写敏感)
任意一处多一个空格、少一个下划线、大小写混用(比如 __uni__a1b2c3 vs __UNI__a1b2c3),都会触发 “资源检测失败”,且无日志提示具体哪一项错——只报 Failed to load app resources 或白屏闪退。
build.gradle 里没有开关能跳过校验
有人试图在 app/build.gradle 里加 ext.disableResourceCheck = true 或修改 uniMPSDK 的 gradle task,但无效。该检测发生在 native 层(libUniOS.so / libUnAndroid.so 加载阶段),早于任何 gradle 配置生效时机。官方未暴露任何 bypass 接口,也不建议 patch so 文件——会导致签名失效或运行时崩溃。
真正能“绕过”的唯一做法:确保三处 ID 100% 一致
别想关检测,要让它“通过”。最稳妥的操作路径是:
- 从 HBuilderX 控制台“发行 > 原生App-本地打包”输出的日志里,复制完整资源路径中的 ID(例如
D:\proj\unpackage\resources\__UNI__a1b2c3→ 提取__UNI__a1b2c3) - 把这个字符串原样填进
manifest.json的"appid"字段(不要删下划线、不要转小写) - 把
assets/apps/下原有文件夹重命名为apps.__UNI__a1b2c3.www(注意开头是apps.,结尾是.www,中间 ID 必须完全一致) - 打开
assets/data/dcloud_control.xml,只改<hbuilder></hbuilder>节点内容为同一字符串,其他字段不动
ID 不一致是离线打包里最隐蔽也最高频的崩溃根源,比签名错、dcloud_appkey 错更难排查——因为错误发生在 native 层,logcat 里往往只有 E/WebViewFactory 或空指针,实际问题却卡在资源加载前的 ID 校验上。











