原生混淆仅在云打包时生效,本地调试、wgt包、自定义基座均不支持;配置必须置于app-plus节点下confusion字段中,仅对.js和.nvue文件生效,且路径须精确、大小写敏感、不含node_modules等目录。

原生混淆只在云打包时生效,本地调试、wgt包、自定义基座均不支持。 这是 uni-app 原生混淆最核心的限制,踩坑前必须确认你走的是「正式云打包」流程。
manifest.json 中启用原生混淆的配置位置
原生混淆配置必须写在 app-plus 节点下,且仅对 JS 和 nvue 文件生效。它和普通 JS 压缩(如 minify)是两套机制,不能混用或互相替代。
正确写法示例:
{
"name": "myApp",
"appid": "",
"description": "",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
"app-plus": {
"confusion": {
"description": "保护支付与加密逻辑",
"resources": {
"utils/crypto.js": {},
"pages/payment/pay.nvue": {},
"store/modules/order.js": {}
}
}
}
}
-
confusion字段必须嵌套在app-plus下,放在根节点或mp-weixin等其他平台节点下完全无效 -
resources是对象,不是数组;每个 key 是项目内相对路径(从项目根开始),必须精确到文件,不支持通配符或目录 - 路径中不能含
node_modules、uni_modules或构建产物目录(如unpackage),否则云打包会静默跳过
哪些文件能被原生混淆?哪些不能?
原生混淆只作用于最终被打包进 App 安装包的 JS/nvue 源码,且有明确范围限制:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- ✅ 支持:
.js、.nvue文件(包括 pages/、components/、utils/ 下的文件) - ❌ 不支持:
.vue文件(会被编译为 JS,但混淆发生在编译后字节码层,无法反向映射到 Vue 模板) - ❌ 不支持:
main.js、app.js、manifest.json、pages.json等框架级配置文件 - ❌ 不支持:已通过
import引入但未被直接列在resources中的依赖文件(混淆不具备递归分析能力)
例如,utils/crypto.js 调用了 lib/aes.js,但后者没列在 resources 里,那 aes.js 就不会被混淆 —— 运行时仍可能被静态分析提取出关键算法片段。
为什么配置了却没效果?常见失效原因
原生混淆失败通常不报错,而是静默降级为无混淆打包。排查时重点看这几点:
- 是否用了 HBuilderX 云打包?本地点击「发行」→「原生App-云打包」,而不是「运行」或「生成 wgt 包」
- 是否在 HBuilderX 中关闭了「使用自定义基座」?开启自定义基座会绕过云打包混淆流程
-
confusion配置是否在「源码视图」下手动编辑?可视化界面(如“App模块配置”)不显示该选项,必须手写 JSON - 路径大小写是否与实际文件一致?Windows 下不敏感,但云打包服务器是 Linux,
Utils/Crypto.js≠utils/crypto.js - 是否在同一个
app-plus下同时写了confusion和usingComponents等字段?字段间无冲突,但若整个app-plus节点语法错误(如逗号遗漏),会导致整段配置被忽略
最容易被忽略的一点:混淆后的代码无法调试,也无法通过 console.log 输出原始变量名 —— 如果你在混淆文件里加了日志却发现变量名还是明文,说明混淆根本没触发,别急着改算法,先查打包方式。










