
周五晚上提交审核周一早上收到驳回通知。这些问题机器早就能发现为什么要人肉查前四篇我们解决了权限、SDK 初始化、依赖治理、数据删除这些问题。现在的问题是这些检查每次都要人工做。提交前一天对着 Checklist 一条一条看。经常漏经常忘。能不能让机器自动检查把人工 Checklist 变成 CI 规则不合规的构建直接拦住。一、先想清楚哪些能自动检查哪些要人判断先把最基础的问题想明白。类型例子能不能自动检查格式问题权限有没有声明能一致性问题隐私政策和实际对不对得上能内容问题用途说明合不合理要人判断体验问题权限弹窗时机好不好要人判断机器能查的格式、一致性、有没有字段。人要判断的内容合不合理、体验好不好。二、Release Gate 检查什么发布前自动检查Release Gate要查哪些检查项做什么权限声明扫描 module.json5看有没有敏感权限依赖版本扫描 oh-package.json5看版本有没有上限第三方 SDK扫描依赖树生成 SDK BOM隐私政策版本看政策版本和当前功能对不对得上SDK 初始化时机检查有没有在 onCreate 里初始化 SDK签名和 Profile检查 Release Profile 配置Debug 配置检查有没有 Debug 代码进 Release 包这段代码解决什么问题发布前自动检查脚本。文件scripts/release-check.js用途CI 合规检查接入位置发布流程constfsrequire(fs);// 检查权限声明functioncheckPermissions(){constmoduleConfigJSON.parse(fs.readFileSync(module.json5));constpermissionsmoduleConfig.requestPermissions||[];constsensitivePermspermissions.filter(pp.name.includes(LOCATION)||p.name.includes(CONTACTS));if(sensitivePerms.length0!sensitivePerms.every(pp.reason)){console.error(错误敏感权限缺少用途说明);returnfalse;}returntrue;}// 检查 SDK 初始化时机functioncheckSDKInit(){constabilityFilefs.readFileSync(entry/src/main/ets/entryability/EntryAbility.ets,utf8);if(abilityFile.includes(onCreate)abilityFile.includes(initSDK)){console.warn(警告onCreate 中可能存在 SDK 初始化);}}三、CI 闸门怎么设把这些检查放到 CI 里。构建的时候自动跑不通过就不让发布。阶段做什么代码提交跑基础检查构建 Release 包跑完整合规检查提交审核前人工确认 机器检查报告四、几个容易踩的坑第一个坑发布前一天才人工检查。经常漏经常忘。第二个坑开发环境配置进入 Release。Debug 代码忘了删。第三个坑权限已删除但隐私政策还写着。政策和代码不同步。第四个坑SDK 升级没人触发合规复核。升级了政策没更新。第五个坑脚本只检查有没有字段不检查内容是否一致。格式对了内容错了。第六个坑CI 通过就认为一定能过审核。机器检查是基础人判断还是要的。这次做工程收口最大的体会是合规不是靠人记是靠流程和工具。真正做的时候最容易忽略的不是怎么写检查规则而是怎么把检查变成流程的一部分。让不合规的代码进不了发布包比靠人去查靠谱得多。