做鸿蒙原生开发这段时间,从最初面对 DevEco Studio 的手忙脚乱,到第一版提交审核被打回,再到最后看到应用在华为应用市场成功上架,整个过程踩了不少坑,也攒下了一整套可复用的流程经验。这篇就来把全过程摊开讲清楚,从项目立项、环境搭建、签名打包,到 AGC 后台配置、审核提交流程,再到高频被拒原因和申诉思路,一次性聊透。
这篇文章适合谁?准备从零开始做 HarmonyOS 原生应用的个人开发者、小团队,以及那些已经被审核折磨过几轮、想搞清楚被拒原因和解决办法的朋友。我不会只贴官方文档,而是把我实际跑通过的路和踩过的坑都写出来,直接照着做就能少走弯路。
1. 从项目立项到上架的整体路线图
1.1 理清 HarmonyOS 应用的几个基本概念
开搞之前,先把几组容易混淆的概念捋清楚,不然一路做下去会出现各种认知偏差。
第一个是 HarmonyOS 和 OpenHarmony 的关系。OpenHarmony 是开源底座,华为手机上的 HarmonyOS 是基于这个底座做的商业发行版。普通开发者做应用上架华为应用市场,用的是 HarmonyOS 的 SDK 和 IDE,不是直接搞 OpenHarmony 那套源码级别的适配。两者工具链不同,面向的人群也不同。
第二个是 HAP 和 APP 的概念。HAP 是 HarmonyOS Ability Package,也就是应用安装包,类似安卓的 APK。APP 是 App Packing,里面可以包含一个或多个 HAP,用于上架和分发。你在 DevEco Studio 里构建出来的发布产物,最终要打包成 APP 格式上传到 AGC(AppGallery Connect)后台。
第三个很重要,现在新开发的应用必须适配 API 12 及以上版本,纯 HarmonyOS NEXT 应用是主流形态。如果还用旧版 API 9 那套思路去写,构建和上架都会遇到兼容性限制,审核那边也会要求你说明适配情况。
把这三个概念搞顺了,后面整个流程才不会绕弯子。
1.2 从产品定位到开发模式选择
原生开发还是跨端方案,这决定了你要不要走鸿蒙原生的完整链路。如果是全新项目,我建议优先考虑 ArkTS 原生开发,因为审核时对原生框架的认可度最高,性能也最可控,而且官方对 ArkTS 的支持力度最大,不管是文档、组件还是 API 覆盖,都远强于第三方桥接层。
如果团队里已经有成熟的 uni-app 项目,想要快速迁移到鸿蒙,技术上确实能通过 uni-app 的鸿蒙适配能力跑起来,但我实测下来有几个难受的地方:部分原生组件调用还是要写条件编译,样式差异偶尔要单独调,性能表现也比纯原生弱一些。不是说不行,而是你要清楚取舍。拿我自己来说,第一个上架应用选择了纯 ArkTS,后续维护成本和审核通过率都更稳妥。
选型这事,我建议按这个标准来判断:有长期运营打算、对性能和体验有要求、希望审核顺利的,直接原生。只是想验证市场反馈、追求快速上线的,可以用跨端方案先跑通,但要有心理准备后面可能要重写。
1.3 项目启动前的账号与资质准备
很多人在写代码前就注册好了华为开发者联盟账号,但资质准备这一块经常被忽略,等审核被拒才想起来补,白白浪费好几天。
个人开发者注册比较简单,用手机号就能注册完成实名认证。企业开发者要提交营业执照等材料,审核时间会长一些。如果只是做个人项目上架,个人账号就够用了。但要上架一些特殊类目,比如涉及支付、社交、内容服务,就需要企业资质甚至特定行业资质。哪怕是个人开发者,也要提前确认自己的应用是否涉及内容分发,要不要办对应许可。
账号这块还有一个坑,你开发时用的签名指纹、包名、应用名称,在 AGC 后台创建应用时就要保持一致,不然后面构建证书时会出现不匹配的问题。我见过有人代码里写了一个包名,AGC 后台建应用时另写了一个,结果上传构建包的时候提示签名不一致,整个打包环节卡住,排查了大半天。
2. 开发环境搭建与工程创建
2.1 DevEco Studio 安装和配置细节
DevEco Studio 是鸿蒙开发的官方 IDE,基于 IntelliJ 平台做的,安装包直接去华为开发者官网下就行。需要注意几个实际使用中的问题。
第一,内存和磁盘空间要给足。我机器是 16GB 内存,跑起来偶尔还是有点吃紧,建议能上 32GB 尽量 32GB,不然同步编译大项目时会卡到怀疑人生。
第二,SDK 和模拟器要分开下载。安装 DevEco Studio 时会自动下载默认 SDK,但模拟器是单独的组件,要在 SDK Manager 里手动勾选下载镜像。新版模拟器支持的系统镜像和 API 等级是不同的,你在创建模拟器前要先确认镜像版本,选错了会导致模拟器反复启动失败。
第三,设置好代理和构建环境。国内网络环境下官方源一般没问题,但如果你的网络环境特殊,下载依赖或 SDK 组件偶尔会失败,需要在构建配置里把 Maven 仓库地址设置成可用的源,同时配置好 Node.js 环境——ArkTS 的构建过程依赖 Node.js,工程创建时会默认去下载对应版本。
2.2 创建工程时的关键选项
新建工程的向导里有几个选项要特别注意。
选择设备类型时,手机应用主要选 Phone。如果你开发的是平板、折叠屏这种大屏设备应用,也要额外勾选对应的 Device Profile。我有一个折叠屏适配的教训:一开始只勾了 Phone,后来要在折叠屏上测试才重新补了工程配置。
选择语言时,初学者先选 ArkTS,它是 TypeScript 的超集,语法上跟 TS 很接近,但要注意 ArkTS 对类型约束更严格,不支持一些 JS 的灵活写法,像 any 类型会在编译阶段报错,这种限制反而能帮你写出更稳定的代码。
模板选择上,空页面模板就够了。官方提供的那几个带复杂结构的模板,有时候组件库版本和你自己写的逻辑会有冲突,不如从空工程开始慢慢加。
2.3 模拟器、真机和日志联调
DevEco Studio 的模拟器比较稳定,但真机调试永远是第一选择。鸿蒙真机调试前要开启开发者模式,连上 USB 后在弹窗里允许调试授权,然后在 DevEco 的 Device Manager 里选中这个设备就能直接跑起来。
日志查看那块,各种日志级别要会看,实际开发中很多诡异的问题表面上没异常,看日志才发现是网络请求抛了底层异常。鸿蒙的网络框架和一些系统能力在 API 12 之后有较大调整,代码适配不到位就会出现请求报错,日志里能看到对应的异常码,对着文档查异常码是最快的排查方式。
记得在工程配置里把 Debug 和 Release 模式分开,特别是日志输出那块,Release 模式下要封掉调试日志,不然审核时对方看到一堆调试输出会认为你没做代码优化,而且泄露内部信息也不安全。
3. 应用签名、证书配置与打包
3.1 为什么签名是上架的第一道关卡
签名的作用在鸿蒙生态里比安卓还要严格。你的应用包必须由华为 AGC 签发的证书签名,才能被设备信任和安装,而且上架时 AGC 后台还要校验签名信息和你在后台填写的证书指纹是否一致。整个签名链路不一致,构建出来的包就是废的。
数据格式上有几个概念容易搞混。“证书”部分是发布证书文件,由 AGC 后台生成并下载;“Profile”部分是描述文件,绑定了你的应用包名和证书;“指纹”是证书的 SHA256 摘要,创建应用时填到后台的指纹配置里。这三者必须同时匹配才能通过校验。
我做第二个应用时就犯过错,直接在 AGC 后台新建了一个应用,没注意它默认生成的证书指纹和第一个应用不同,结果本地构建时用了自动签名,签名指纹自然对不上,上传后被系统打回,提示证书不匹配。解决办法就是得仔细检查每个应用后台的证书配置,不要混用证书。
3.2 配置签名文件三种可行路径
第一种,DevEco Studio 的自动签名。在工程级别的配置界面里勾选自动签名,登录你的华为开发者账号,IDE 会帮你拉取 AGC 后台的证书和 Profile 信息。这种最省事,个人开发建议用这种,前提是包名和 AGC 后台应用一致。
第二种,AGC 后台下载证书,本地手动配置。适用于需要集成到 CI/CD 流水线、或者多人协作的场景。先在 AGC 后台生成证书,再把证书文件和 Profile 文件下载放好,在配置文件里指向这些文件路径,并且把存储密码等参数填全。
第三种,纯命令行构建签名。用命令直接 build hap 或 assemble APP,同时通过参数指定签名文件,适合脚本自动化上架的场景。我主要用第二种配合脚本做测试包构建,用第一种做最终上架包。
3.3 打包时容易忽略的安全和兼容配置
打包前要检查三个点。
第一,targetSdkVersion 和 compatibleSdkVersion。发布版应用要设定合理的 API 版本,现在上架要求比较高,如果你还在用很低的 API 版本会提示不满足最低版本要求,直接影响上架。
第二,应用图标和名称。图标要符合华为应用市场的设计规范,不能有政治敏感、色情或其他违规元素,这个在审核阶段会被人工检查。名称方面,不能跟已有知名应用重名,不能使用官方品牌名蹭热度。
第三,64 位支持。新版本应用市场强制要求支持 64 位架构,好在用官方模板创建的工程默认就是支持 arm64-v8a 的,但是如果你集成了第三方 so 库,就要留意它是否有 64 位版本,缺了会导致审核不通过。
4. AGC 后台配置与提审流程实操
4.1 创建应用、完善基本信息
在 AppGallery Connect 后台,第一步要新建应用。选择 HarmonyOS 应用类型,填好应用名称、包名和默认语言。包名这块千万别乱填,后面代码里配置的包名必须跟这里保持一致,不一致连构建签名那关都过不去。
之后要完善应用信息。应用介绍、功能亮点、更新说明这些材料,尽量写得具体、真实。审核人员会对照你的应用实际功能来核对描述,如果你写着有某个功能但实际没有,大概率会被判定为功能不符驳回。应用分类也要选准确,医疗、金融、教育这类特殊类目,会有额外的资质审查,选错分类会很麻烦。
4.2 隐私政策、用户协议与权限声明
隐私政策不是随便贴一段文字就完事,华为对这块查得很严。隐私政策的网址必须能正常访问,内容要明确列出你采集了哪些用户数据、用途是什么、如何存储、怎么注销账号和删除数据。里面不能有自相矛盾的说法,权限声明和实际申请也要对应上。
用户协议也要有,特别是涉及平台型、社区型应用,光有隐私政策是不够的。协议要交代清楚用户行为规范、违规处理、免责声明,这些法律文本虽然要花点心思,但审核阶段躲不掉。如果应用支持用户生成内容,还要准备内容审核机制说明,违规内容的处理流程。
权限声明部分,一个常见问题是“动态申请权限时对话框文案不规范”。系统要求你的权限说明必须清晰告知用户这次授权是为了做什么,不能只写“检测网络状态”这种含糊的话。在代码里调 requestPermissionsFromUser 时,说明文案要认真写,别到时候审核员一测就发现你权限申请的时机和说明都对不上。
4.3 提交审核和常见驳回节点
完善完资料就可以构建上传了。把前面构建好的 APP 包或 HAP 包上传到 AGC 后台的“应用分发”模块,上传成功后填写版本信息和发布范围,再提交审核。
审核流程有自动检查和人工检查两道。自动检查主要看签名、包体完整性、基本配置合法性,异常的话直接拒。人工检查会安装应用,逐项核对功能、隐私、内容、界面和资质。一般 1-3 个工作日出结果,如果遇到节假日或旺季会延长,我有个应用最长等过 5 个工作日。
被驳回后 AGC 后台会有驳回原因和具体的违规项说明,但有时候驳回原因写得很粗,比如“应用存在违反规定的内容”,这时候不要猜,直接提交工单或联系客服追问具体细节。我处理过一次,研发同学找半天没头绪,最后通过工单问到了对方测试的步骤和截图,一对照就发现问题出在某个页面缺少用户协议入口。
5. 高频被拒问题实测拆解
5.1 隐私合规类驳回
隐私合规是驳回比例最高的区域,几乎占了一半。
常见场景一:隐私政策链接根本无法访问。有人把隐私政策放到了自己没备案的网站上,审核人员装机后联网点击发现打不开,直接驳回。解决办法是放到稳定可访问且页面加载速度快的地址,最好用 HTTPS,别用没备案的域名。
常见场景二:申请的权限和实际功能脱节。比如应用只是读取相册里的图片,但权限申请里还申请了麦克风。这种情况必须移除多余权限,或者补充说明合理的业务场景。最稳妥的做法是在代码里按需申请权限,而非一开始就申请所有权限。
常见场景三:个人信息收集声明不完整。应用如果接入了统计分析、广告SDK,而这些SDK会采集设备信息、使用行为,隐私政策里却没提到,那驳回概率极大。要写清楚第三方SDK的名称、所属公司、收集的数据类型和目的。
5.2 内容和资质类驳回
内容类驳回主要指应用内包含违规、不适宜或与申请类目不符的内容。比如你上个版本有广告,但没在应用介绍里说明广告存在的位置和形式,审核人员觉得涉嫌误导用户,驳回。比如应用内有用户生成内容,但缺乏举报、屏蔽机制,也会被要求整改。
资质类驳回常见于特殊行业。涉及医疗、金融、直播、教育、游戏等,需要你提供对应的行业资质证明。个人开发者如果没有对应资质,最好绕开这些方向,换一个不需要资质的方向。资质类驳回基本没有申诉空间,只能补齐材料重新提审。
5.3 功能和性能类驳回
审核人员不只是看功能在不在,还会关注质量。应用在部分设备上崩溃、启动黑屏时间过长、点击无响应,都会被判定为性能不达标。这个只能在真机测试上下功夫,尽量覆盖不同机型,特别是芯片平台和屏幕尺寸差异大的设备。
交互方面,回退键逻辑混乱、状态栏遮挡内容、界面在横竖屏切换时布局错乱,这类问题也容易导致驳回。审核员按标准的测试用例过一遍你的 APP,这些细节都会被记录。
还有兼容性问题很隐蔽,比如应用从官网下载的知识、存储路径在不同的系统版本上行为不同,或者某些系统组件在特定API版本上表现不一致。这些没有捷径,只能靠多测不同版本固件或等用户反馈后再修。
5.4 常见问题速查表
| 被拒类型 | 原因示例 | 处理思路 |
|---|---|---|
| 隐私政策不可访问 | 域名未备案、链接失效 | 移到稳定 HTTPS 地址,上线前自测链接 |
| 权限声明不符 | 申请权限多于实际功能 | 按需申请,删除无关权限 |
| 第三方 SDK 未声明 | 统计分析 SDK 收集信息未写入隐私政策 | 补齐 SDK 清单和说明 |
| 内容类违规 | 存在侵权、色情、暴力内容 | 剔除或接入审核过滤机制 |
| 类目资质缺失 | 涉及特殊行业未提供许可 | 补资质或调整应用方向 |
| 性能崩溃 | 部分设备启动崩溃 | 多机型回归,收集崩溃日志 |
| 功能与描述不符 | 介绍中有但实际找不到入口 | 核对描述,掩盖不存在的功能 |
| 界面交互问题 | 回退键失效、布局错乱 | 按照官方交互规范逐项修复 |
| 名称撞车 | 与已有应用重名或近似 | 改名并调整图标设计 |
| 签名信息不匹配 | 包名、证书指纹与后台不一致 | 核对后台配置,重建签名 |
5.5 申诉和加急的正确做法
审核被拒之后,如果你认为驳回理由不合理,或者你已经修好了对应问题,可以走申诉流程。在 AGC 后台提交申诉时要把情况说清楚,上传证据材料(截图、视频、文字说明),申诉处理一般也需要 1-2 个工作日,有结论后会同步到站内信。
如果应用因为紧急故障需要更新,比如线上版本出现了严重漏洞,可以联系应用市场客服申请加急审核。加急审核不是每次都能成功,但如果是安全漏洞、资金交易异常、数据泄露这类高风险问题,申请成功率高很多。
我在实际使用中体会最深的是,申诉材料一定要准备得像给甲方汇报一样完备,时间线、截图、复现步骤、修改前后对比,四样齐全,处理人员能快速判断,你通过的几率就大很多。如果只是简单写“我修复了”,往往要来回扯好几轮,浪费时间,还可能错过上架窗口期。
6. 全流程优化和个人经验补充
6.1 持续集成和自动打包方案
手动打包上传不仅浪费时间,还容易出错。我后来把构建流程迁移到了 CI 流水线上,本地代码提交后自动触发构建、签名、打包,然后通过命令行工具上传到 AGC。这个方案对个人开发者来说初期配置成本有一点,但长期看非常值。
重点提醒一个坑:CI 环境里用的签名文件要和本地保持一致,而且密码、证书这类敏感信息要放到流水线的变量管理里,不能直接写进代码库。最好在建流水线时多做几种测试:比如只改了资源文件、只改了代码逻辑、修改了依赖版本,分别跑一遍构建,确认签名没受影响。
6.2 审核被拒后的快速修复节奏
被拒了心态不要崩,按这个节奏走效率最高。
第一,看完驳回原因先别急着改代码,先打开审核方给的截图或录屏逐帧看,定位具体页面。第二,能本地复现的先本地复现,不能复现的要考虑是不是特殊设备或系统版本才触发。第三,修改后不要只测你手头的真机,有条件的话多找几台不同品牌、不同系统的设备过一遍。第四,同时更新 AGC 后台的版本说明,明确写“修复了某某问题”,审核方再测时心里有数。
修复和提审之间要留足够时间做回归测试。我有一次太心急,改完直接提审,结果没新问题出现,被我自己的旧代码 bug 挡住,又耽误了一个提审周期。
6.3 上架之后依然要做的事情
应用上了架不是终点,而是新一轮工作的起点。后台的数据监控要看:崩溃率、启动时长、卡顿率、用户反馈、下钻到具体设备数据,这些都是后面优化方向的第一手依据。
华为开发者后台的“崩溃分析”、“性能分析”和“运营分析”模块要定期看,同时也要及时回应用户评论和评分。应用市场对新上架应用会有“新手观察期”,这个阶段评分和评论质量很重要,不要放任不管。
还有一个容易忽略的,版本升级策略要提前想清楚。鸿蒙系统迭代很快,API 升级后旧版本应用可能被标记为不兼容,所以要保持跟最新 API 的适配节奏。长时间不更新会导致应用在后续新机型和系统版本上慢慢失去曝光和安装机会。
最后再分享一个小技巧,上架后把审核被拒的完整解决方案整理成自己的知识库,每次迭代前打开看一眼,把对应风险点提前规避掉。我做第二个应用时就轻松了很多,因为大部分坑在第一个应用上都已经排过了。