manifest.json需按平台分层配置,如app-plus、mp-weixin、h5等;权限须写在对应平台节点下且名称完整准确;api地址应通过自定义字段注入并配合构建脚本处理。

manifest.json 里怎么写平台特有配置
manifest.json 不是扁平 JSON,而是按平台分层嵌套的结构。你不能把所有配置写在顶层,否则 Android/iOS/H5 会互相覆盖或被忽略。
必须把平台专属字段放在对应平台节点下:app-plus(App)、mp-weixin(微信小程序)、h5(H5)、mp-alipay(支付宝)等。这些字段名不能拼错,大小写敏感,比如 mp-weixin 写成 mp-weixin 是对的,但 mp-weChat 或 weixin 就无效。
-
app-plus下的distribute.android.packagename和distribute.ios.bundleidentifier必须填写合法包名/Bundle ID,否则打包失败或安装后无法启动 -
h5下的router.mode只影响 H5 路由行为,对 App 完全无作用;设成"history"时,base字段必须同步配对,比如部署在/admin/子路径,就得写"base": "/admin/" -
mp-weixin的appid是微信后台申请的真实 ID,填错会导致真机调试白屏、上传失败
Android 和 iOS 权限声明为什么总不生效
权限不弹窗、打包后调用 API 报错、真机静默失败——90% 是因为 manifest.json 里权限字段写错了位置或格式。
Android 权限必须写在 app-plus.distribute.android.permissions 数组里,且每个项必须是完整限定名,例如:"android.permission.CAMERA"。漏掉 android.permission. 前缀,HBuilderX 不报错,但生成的 APK 在 Android 6.0+ 上直接拒绝调用,plus.android.requestPermissions 回调里的 deniedAlways 可能为空,误判为“用户没点”,实际是系统压根不认这个权限。
- 常见错误写法:
"CAMERA"、"camera"、"READ_EXTERNAL_STORAGE"(缺前缀) - Android 10+ 还需注意:
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE需配合requestLegacyExternalStorage: true(仅调试),上架前应迁移到 Scoped Storage - iOS 没有运行时权限弹窗机制,
app-plus.distribute.ios下不支持声明权限,需通过 Info.plist 手动补充(如NSCameraUsageDescription),manifest.json 里只管 Bundle ID 和图标资源路径
多环境 API 地址怎么注入到 App 端
别指望 process.env.UNI_BASE_URL 在 App 端生效。App 构建时不会解析 JS 层环境变量,它只读 manifest.json 里明确声明的字段。
正确做法是:在 manifest.json 顶层或 app-plus 节点下加自定义字段,比如 "apiBase": "https://api.example.com",然后在代码里用 uni.getProvider 或 plus.runtime.getProperty 读取(注意:H5 端无法用后者,需兼容处理)。
- 不要把敏感地址写死在 manifest.json 中——它会被打包进原生资源,可被反编译提取
- 推荐方案:用构建脚本(如
vue.config.js中的define)替换占位符,例如把"apiBase": "__API_BASE__"替换为真实值,避免暴露逻辑 - 测试环境打包时,务必验证
uni.getSystemInfoSync().platform === 'android'或'ios'后再读取,避免 H5 端因方法不存在而报错
微信小程序隐私接口声明为什么审核被拒
微信小程序不是“声明了权限就能用”,而是按具体 API 名精确登记。漏一个、错一个,真机就静默失败,控制台无报错,只返回 errCode: -1。
必须把所有实际调用的 API 名,原样写进 mp-weixin.requiredPrivateInfos 数组。这个字段只接受微信文档明确定义的字符串,比如你用了 uni.getLocation 和 uni.getPhoneNumber,就必须同时写 "getLocation" 和 "getPhoneNumber"。
- 不能写别名:
"getlocation"(小写)、"getUserInfo"(驼峰)、"uniGetLocation"(加前缀)都无效 - 必须配套
permission.scope.userLocation.desc字段,且值不能为空字符串,否则华为、小米商店审核可能直接驳回 - 如果只在条件分支里调用某个 API(比如仅登录后才调
getPhoneNumber),也必须提前声明,否则上线后该分支必挂











