AtomGit Flutter 鸿蒙客户端:AppGallery 应用发布全流程

AtomGit Flutter 鸿蒙客户端:AppGallery 应用发布全流程 将 Flutter 鸿蒙应用发布到华为 AppGallery应用市场是整个开发流程的最后一步。这个过程涉及签名申请、证书配置、构建打包、应用信息填写等多个环节。本文以 E-Brufen 的实际发布经历为例完整记录从零到上架的全流程。1. 发布流程总览第1步注册华为开发者账号 → AppGallery Connect 创建应用 ↓ 第2步生成 CSR 文件 → 申请证书 (.cer) ↓ 第3步创建 Provisioning Profile (.p7b) ↓ 第4步配置 build-profile.json5 签名信息 ↓ 第5步填写 app.json5 应用元数据 ↓ 第6步构建 Release HAP → 上传到 AppGallery Connect ↓ 第7步填写应用信息 → 提交审核2. 第一步AppGallery Connect 创建应用访问 AppGallery Connect登录华为开发者账号创建新应用。关键配置项字段E-Brufen 的实际值应用名称E-Brufen包名com.flutter.brufen应用类别健康目标平台手机Phone包名com.flutter.brufen是一个关键字段——它必须在以下三处保持完全一致AppGallery Connect 的应用包名ohos/AppScope/app.json5中的bundleName签名证书申请时填写的包名任何一处不一致都会导致签名验证失败。3. 第二步生成 CSR 并申请证书3.1 什么是 CSRCSRCertificate Signing Request是证书签名请求文件包含了你的应用包名、组织信息以及公钥。鸿蒙应用签名使用的是SHA256withECDSA算法。在 DevEco Studio 或命令行中生成 CSR# 使用 keytool 生成密钥对keytool-genkeypair-aliasaaa-keyalgEC-sigalgSHA256withECDSA\-keysize256-keystorefirstproject.p12-storetypePKCS12\-validity3650-dnameCNE-Brufen Dev, OUDev, OE-Brufen, LShenzhen, STGuangdong, CCN# 导出 CSRkeytool-certreq-aliasaaa-keystorefirstproject.p12\-storetypePKCS12-filefirstproject.csr-sigalgSHA256withECDSA执行后会生成两个文件firstproject.p12——密钥库私钥必须妥善保管不可泄露firstproject.csr——证书签名请求用于向华为申请证书3.2 申请调试/发布证书将.csr文件上传到 AppGallery Connect 的证书管理页面。选择证书类型证书类型用途有效期调试证书开发阶段真机调试1 年发布证书AppGallery 上架最多 3 年E-Brufen 申请的是发布证书下载后得到22.cer文件。4. 第三步创建 Provisioning ProfileProvisioning Profile.p7b文件将应用包名、证书、设备列表绑定在一起。在 AppGallery Connect 的Profile 管理页面创建选择发布类型Release绑定刚申请的证书填写包名com.flutter.brufen选择设备范围发布类型一般为全部设备下载后得到123456Release.p7b。5. 第四步配置 build-profile.json5这是整个签名配置的核心——在ohos/build-profile.json5中配置签名信息{ app: { signingConfigs: [ { name: default, type: HarmonyOS, material: { storeFile: D:/Flutter/firstproject/firstproject.p12, storePassword: 00000019314A5E64E7AE176747817469CE44330E099BA13B5A7D6533429C0537734EAA5091705C516F, keyAlias: aaa, keyPassword: 0000001994B09538837E33B686A5C7411DD18DEE804F05C29495CEFC1561BB7B2CF9F0AF915CC82BE2, signAlg: SHA256withECDSA, profile: D:/Flutter/firstproject/123456Release.p7b, certpath: D:/Flutter/firstproject/22.cer } } ], products: [ { name: default, signingConfig: default, compatibleSdkVersion: 6.1.0(23), runtimeOS: HarmonyOS, targetSdkVersion: 6.1.0(23) } ], buildModeSet: [ { name: debug }, { name: profile }, { name: release } ] }, modules: [ { name: entry, srcPath: ./entry, targets: [ { name: default, applyToProducts: [default] } ] } ] }各字段说明字段说明storeFile.p12密钥库文件的绝对路径storePassword密钥库密码加密存储keyAlias密钥别名与生成 CSR 时的-alias一致keyPassword密钥密码加密存储signAlg签名算法SHA256withECDSAprofileProvisioning Profile 文件路径certpath证书文件路径compatibleSdkVersion最低兼容 SDK 版本6.1.0(23)targetSdkVersion目标 SDK 版本6.1.0(23)安全警告storePassword和keyPassword在项目 Git 仓库中是明文存储的。对于开源项目建议将这两个值放到环境变量或本地配置文件中并在.gitignore中排除。E-Brufen 作为一个个人项目采用了本地开发直接配置的方式但如果多人协作务必做好密码隔离。6. 第五步配置应用元数据在ohos/AppScope/app.json5中填写应用基本信息{ app: { bundleName: com.flutter.brufen, vendor: example, versionCode: 1000000, versionName: 1.0.0, icon: $media:1, label: $string:app_name } }versionCode是整数值每次提交新版本时必须递增。$media:1引用AppScope/resources/base/media/1.png作为应用图标。对应的字符串资源在AppScope/resources/base/element/string.json{string:[{name:app_name,value:E-Brufen}]}7. 第六步构建 Release HAP在项目根目录执行构建命令flutter build hap--release构建产物输出到ohos/entry/build/default/outputs/default/ ├── entry-default-unsigned.hap # 未签名 HAP ├── entry-default-signed.hap # 已签名 HAP上传这个 └── pack.info # 打包信息Flutter 的鸿蒙构建工具链会自动读取build-profile.json5中的签名配置在构建后对 HAP 进行签名。8. 第七步AppGallery Connect 上传与审核上传entry-default-signed.hap到 AppGallery Connect 的版本页面填写以下信息应用描述介绍 E-Brufen 的功能心理健康、白噪音、呼吸练习、情绪日记隐私政策E-Brufen 是完全离线应用不需要上传任何数据但仍需提供隐私声明截图上传 3-5 张应用截图首页、白噪音页、呼吸页、日记页应用分类健康 心理健康提交后等待华为审核通常在 1-3 个工作日内完成。9. E-Brufen 发布注意事项从 Git 提交历史可以看到E-Brufen 在上线前做了以下准备工作ab44498 chore: remove INTERNET permission(offline app), update app metadataforAppGallery release 03ea749 cleanup: remove audio assets entry from pubspec, fix EntryAbility, delete empty audiodir891c03d feat: generate programmatic app icon, fix app.json5 reference关键准备工作移除不必要的权限声明module.json5中requestPermissions设为空数组[]清理空资源引用删除不存在的音频资源引用避免构建时报错生成符合规范的应用图标确保AppScope/resources/base/media/和entry/src/main/resources/base/media/中都有图标文件10. 常见发布问题排查问题可能原因解决方案签名验证失败包名不一致检查三处包名是否统一证书已过期调试证书有效期短检查证书类型和有效期HAP 包名不匹配app.json5 被修改检查 bundleName图标不符合规范缺少 startWindowIcon确保 media/icon.png 存在审核被拒缺少隐私声明补充隐私政策 URL总结从 CSR 生成到 AppGallery 审核通过整个发布流程需要 3-5 个工作日。最关键的环节是包名一致性和签名配置的正确性。E-Brufen 从开始开发到成功上架经历了本地开发、调试、清理、签名的完整流程下文将深入解析鸿蒙签名机制的技术细节。上一篇Flutter 鸿蒙应用错误处理与优雅降级策略下一篇鸿蒙应用签名与证书管理详解E-Brufen Dev, Flutter 鸿蒙开发者项目地址AtomGit - E‑Brufen 。