及时做APP开发实战(二十)-应用打包与发布
及时做APP开发实战(二十)-应用打包与发布本文将介绍HarmonyOS应用的打包发布流程包括签名配置、HAP打包、应用上架等。一、打包发布流程1.1 整体流程【图1打包发布流程图】┌─────────────────────────────────────┐ │ 打包发布流程 │ ├─────────────────────────────────────┤ │ │ │ 1. 签名配置 │ │ ↓ │ │ 2. 构建HAP包 │ │ ↓ │ │ 3. 测试验证 │ │ ↓ │ │ 4. 上架应用市场 │ │ ↓ │ │ 5. 版本更新 │ │ │ └─────────────────────────────────────┘1.2 关键步骤步骤说明工具签名配置配置应用签名证书DevEco Studio构建HAP编译生成安装包hvigor测试验证真机安装测试hdc上架发布提交应用市场AGC二、签名配置2.1 签名类型【图2签名配置界面】签名类型 ┌─────────────────────────────────────┐ │ Debug签名 │ │ - 用于开发测试 │ │ - 自动生成签名 │ │ - 无法上架应用市场 │ ├─────────────────────────────────────┤ │ Release签名 │ │ - 用于正式发布 │ │ - 需要申请证书 │ │ - 可以上架应用市场 │ └─────────────────────────────────────┘2.2 签名配置文件// build-profile.json5 { app: { signingConfigs: [ { name: default, type: HarmonyOS, material: { certpath: certs/release.cer, storePassword: password, keyAlias: jishizuo, keyPassword: password, profile: certs/release.p7b, signAlg: SHA256withECDSA, storeFile: certs/release.p12 } } ], products: [ { name: default, signingConfig: default, compatibleSdkVersion: 9.0.0, runtimeSdkVersion: 9.0.0, buildOption: { strictMode: { caseSensitiveCheck: true, useNormalizedOhmUrl: true } } } ] } }2.3 申请签名证书// 步骤说明1.登录AGCAppGallery Connect https://developer.huawei.com/consumer/cn/2.创建应用-选择项目-填写应用信息-获取应用ID3.生成签名证书-使用DevEco Studio生成.p12文件-或使用命令行生成4.申请发布证书-上传.csr文件-下载.cer证书-下载.p7b配置文件5.配置签名-将证书文件放入项目-修改build-profile.json5三、构建HAP包3.1 构建命令【图3构建输出结果】构建命令 ┌─────────────────────────────────────┐ │ # Debug构建 │ │ hvigorw clean │ │ hvigorw assembleHap --mode module │ │ │ │ # Release构建 │ │ hvigorw clean │ │ hvigorw assembleHap --mode module │ │ -p productdefault │ │ -p buildModerelease │ └─────────────────────────────────────┘ 输出目录 entry/build/default/outputs/default/ └── entry-default-signed.hap3.2 构建配置// hvigorfile.ts import { hapTasks } from ohos/hvigor-ohos-plugin; export default { system: hapTasks, plugins: [] }// oh-package.json5 { name: jishizuo, version: 1.0.0, description: 及时做 - 番茄钟待办管理应用, main: , author: , license: ISC, dependencies: {} }3.3 版本配置// app.json5 { app: { bundleName: com.example.jishizuo, vendor: { name: 开发者, id: developer }, versionCode: 1000000, versionName: 1.0.0, icon: $media:app_icon, label: $string:app_name } }四、测试验证4.1 真机安装# 查看连接设备hdc list targets# 安装HAP包hdcinstallentry-default-signed.hap# 启动应用hdc shell aa start-aEntryAbility-bcom.example.jishizuo# 查看日志hdc hilog-Tjishizuo# 卸载应用hdc uninstall com.example.jishizuo4.2 测试检查项测试检查清单 ┌─────────────────────────────────────┐ │ □ 应用启动正常 │ │ □ 界面显示正常 │ │ □ 功能运行正常 │ │ □ 数据存储正常 │ │ □ 权限申请正常 │ │ □ 无崩溃无报错 │ │ □ 性能表现良好 │ └─────────────────────────────────────┘五、应用上架5.1 上架准备// 上架所需材料1.应用信息-应用名称及时做-应用简介番茄钟待办管理应用-应用详情功能介绍、使用说明-应用分类效率办公2.应用图标-512x512PNG格式-无透明通道-无圆角处理3.应用截图-至少3张截图-分辨率1080x1920-展示核心功能4.隐私政策-隐私政策链接-数据收集说明-权限使用说明5.2 上架流程上架流程 ┌─────────────────────────────────────┐ │ 1. 登录AGC控制台 │ │ ↓ │ │ 2. 选择应用 │ │ ↓ │ │ 3. 填写应用信息 │ │ ↓ │ │ 4. 上传HAP包 │ │ ↓ │ │ 5. 提交审核 │ │ ↓ │ │ 6. 等待审核结果 │ │ ↓ │ │ 7. 审核通过后上架 │ └─────────────────────────────────────┘5.3 审核注意事项审核常见问题 ┌─────────────────────────────────────┐ │ 1. 应用崩溃 │ │ - 确保稳定性 │ │ - 充分测试 │ │ │ │ 2. 功能不符合描述 │ │ - 描述准确 │ │ - 功能完整 │ │ │ │ 3. 权限使用不合理 │ │ - 说明权限用途 │ │ - 避免过度权限 │ │ │ │ 4. 界面显示异常 │ │ - 适配不同机型 │ │ - 测试各种分辨率 │ └─────────────────────────────────────┘六、版本更新6.1 版本号规则版本号规则major.minor.patch major主版本号 - 重大功能更新 - 架构调整 - 不兼容更新 minor次版本号 - 新增功能 - 功能优化 - 兼容更新 patch修订号 - Bug修复 - 小幅优化 - 安全更新 示例 1.0.0 → 1.0.1 (Bug修复) 1.0.1 → 1.1.0 (新增功能) 1.1.0 → 2.0.0 (重大更新)6.2 更新配置// app.json5 版本更新 { app: { bundleName: com.example.jishizuo, versionCode: 1000001, // 递增 versionName: 1.0.1 // 更新 } }七、应用加固与安全7.1 代码混淆配置// build-profile.json5 { app: { products: [ { name: default, signingConfig: default, compileSdkVersion: 9, compatibleSdkVersion: 9, runtimeOS: HarmonyOS, buildOption: { arkOptions: { obfuscation: { enable: true, options: { enableNameObfuscation: true, enablePropertyObfuscation: true, enableExportObfuscation: true, reservedNames: [^MainAbility$, ^Entry$, ^Component$], reservedProperties: [^id$, ^key$, ^name$] } } } } } ] } }7.2 敏感信息保护// src/main/ets/config/SecureConfig.etsexportclassSecureConfig{privatestaticsecureStore:secureStore|nullnull;staticasyncinit(context:Context){this.secureStoreawaitsecureStore.create(context,secure_config);}staticasyncsaveSecret(key:string,value:string):Promisevoid{if(!this.secureStore)thrownewError(SecureStore not initialized);awaitthis.secureStore.set(key,value);}staticasyncgetSecret(key:string):Promisestring|null{if(!this.secureStore)thrownewError(SecureStore not initialized);returnawaitthis.secureStore.get(key);}}八、性能优化与包体积优化8.1 包体积分析HAP包结构分析 ┌─────────────────────────────────────┐ │ 及时做.hap (5.2MB) │ ├─────────────────────────────────────┤ │ ├── resources/ (2.1MB) │ │ │ ├── base/media/ (1.5MB) │ │ │ └── rawfile/ (500KB) │ │ ├── ets/ (1.8MB) │ │ │ ├── source/ (1.2MB) │ │ │ └── libs/ (600KB) │ │ └── libs/ (800KB) │ └─────────────────────────────────────┘8.2 资源优化策略// build-profile.json5 资源压缩配置 { app: { products: [{ buildOption: { resourceOptions: { compressOptions: { enable: true, quality: 80, formats: [png, jpg, webp] } } } }] } }九、多渠道打包9.1 渠道配置// build-profile.json5 多渠道配置 { app: { products: [ { name: huawei, signingConfig: release, output: { channel: huawei, apkName: jishizuo-huawei-${versionName}.hap } }, { name: thirdparty, signingConfig: release, output: { channel: thirdparty, apkName: jishizuo-thirdparty-${versionName}.hap } } ] } }9.2 渠道信息注入// src/main/ets/config/ChannelConfig.etsexportclassChannelConfig{privatestaticreadonlyCHANNEL__CHANNEL__;staticgetChannel():string{returnthis.CHANNEL||default;}staticisHuaweiChannel():boolean{returnthis.getChannel()huawei;}}十、灰度发布与AB测试10.1 灰度发布配置// src/main/ets/config/GrayReleaseConfig.etsexportclassGrayReleaseConfig{privatestaticreadonlyGRAY_RATIO10;// 10%用户staticisGrayUser(userId:string):boolean{consthashthis.hashCode(userId);returnMath.abs(hash%100)this.GRAY_RATIO;}privatestatichashCode(str:string):number{lethash0;for(leti0;istr.length;i){hash(hash*31str.charCodeAt(i))|0;}returnhash;}}10.2 AB测试实现// src/main/ets/experiment/ABTestManager.etsexportclassABTestManager{privatestaticinstance:ABTestManager;privateexperiments:Mapstring,ABExperimentnewMap();staticgetInstance():ABTestManager{if(!ABTestManager.instance){ABTestManager.instancenewABTestManager();}returnABTestManager.instance;}getVariant(experimentId:string):string{constexperimentthis.experiments.get(experimentId);returnexperiment?.variant||control;}}十一、常见问题与解决方案11.1 打包问题常见打包问题 ┌─────────────────────────────────────┐ │ 1. 签名失败 │ │ 原因签名配置错误 │ │ 解决检查签名文件路径和密码 │ │ │ │ 2. 资源找不到 │ │ 原因资源路径错误 │ │ 解决检查$r()路径是否正确 │ │ │ │ 3. 包体积过大 │ │ 原因资源未压缩 │ │ 解决启用资源压缩配置 │ └─────────────────────────────────────┘11.2 上架问题constreviewIssues[{issue:应用图标不符合规范,solution:确保图标为512x512像素},{issue:隐私政策未提供,solution:在应用内提供隐私政策链接},{issue:权限申请未说明,solution:在申请权限前向用户说明用途},{issue:应用崩溃,solution:确保应用在真机上稳定运行}];十二、总结本文介绍了HarmonyOS应用打包发布流程核心要点签名配置Debug和Release签名构建HAP使用hvigor构建测试验证真机安装测试应用上架AGC提交审核版本更新版本号管理应用加固代码混淆与安全性能优化包体积优化多渠道打包渠道配置与注入灰度发布AB测试实现

相关新闻

charset_normalizer源码解析:纯Python实现的字符集检测算法终极指南

charset_normalizer源码解析:纯Python实现的字符集检测算法终极指南

charset_normalizer源码解析:纯Python实现的字符集检测算法终极指南 【免费下载链接】charset_normalizer Truly universal encoding detector in pure Python. 项目地址: https://gitcode.com/gh_mirrors/ch/charset_normalizer 字符集检测是处理文本数据时…

2026/7/21 6:43:13阅读更多 →
VSEARCH多平台部署指南:Linux、macOS、Windows全平台配置

VSEARCH多平台部署指南:Linux、macOS、Windows全平台配置

VSEARCH多平台部署指南:Linux、macOS、Windows全平台配置 【免费下载链接】vsearch Versatile open-source tool for microbiome analysis 项目地址: https://gitcode.com/gh_mirrors/vs/vsearch VSEARCH是一款功能强大的微生物组分析开源工具,支…

2026/7/20 20:22:48阅读更多 →
Cursor脚手架定制化开发最后防线:当官方插件市场失效时,如何用Rust编写原生扩展(含WASM加速构建模块源码)

Cursor脚手架定制化开发最后防线:当官方插件市场失效时,如何用Rust编写原生扩展(含WASM加速构建模块源码)

更多请点击: https://kaifayun.com 第一章:Cursor脚手架定制化开发的终极挑战与定位 Cursor 作为基于 LLM 深度集成的智能编程 IDE,其脚手架(Scaffold)能力并非开箱即用的标准化模板,而是依赖开发者对底层…

2026/7/21 0:23:57阅读更多 →
C2000 ePWM事件触发与数字比较子模块:硬件化实时控制与保护

C2000 ePWM事件触发与数字比较子模块:硬件化实时控制与保护

1. 项目概述与核心价值在电机驱动和数字电源这类对实时性要求极高的嵌入式系统中,PWM信号的生成早已不是简单的“开”和“关”。我们常常需要在特定的、精确的时刻点去触发一些关键操作,比如在PWM周期的中点采样电流,或者在过流信号出现的瞬间…

2026/7/21 16:09:43阅读更多 →
GPU显存占用率×温度×KV缓存命中率=响应速度?工程师必懂的5个隐藏影响因子,90%团队还在盲调!

GPU显存占用率×温度×KV缓存命中率=响应速度?工程师必懂的5个隐藏影响因子,90%团队还在盲调!

更多请点击: https://kaifayun.com 第一章:GPU显存占用率温度KV缓存命中率响应速度?工程师必懂的5个隐藏影响因子,90%团队还在盲调! GPU推理延迟并非仅由显存带宽或算力决定。当模型输出出现毫秒级抖动、批量吞吐骤降…

2026/7/21 16:09:43阅读更多 →
TI PRUSS INTC中断控制器:三层架构、寄存器配置与实时系统实战

TI PRUSS INTC中断控制器:三层架构、寄存器配置与实时系统实战

1. 项目概述与INTC核心价值 在嵌入式实时控制领域,尤其是像TI Sitara系列处理器中的PRU(可编程实时单元)子系统里,中断控制器(INTC)的角色,远不止是一个简单的“开关”或“路由器”。它更像是一…

2026/7/21 16:09:43阅读更多 →
Llama3 + Ollama + LangChain + VectorDB 四件套企业部署全链路(生产环境压测数据实录:QPS提升3.2倍,成本下降41%)

Llama3 + Ollama + LangChain + VectorDB 四件套企业部署全链路(生产环境压测数据实录:QPS提升3.2倍,成本下降41%)

更多请点击: https://intelliparadigm.com 第一章:Shell脚本的基本语法和命令 Shell脚本是Linux/Unix系统自动化任务的核心工具,其本质是按顺序执行的命令集合,由Bash等Shell解释器逐行解析运行。脚本以 #!/bin/bash&#xff0…

2026/7/21 16:09:43阅读更多 →
I2C寄存器深度解析:从地址配置到中断DMA的嵌入式驱动实战

I2C寄存器深度解析:从地址配置到中断DMA的嵌入式驱动实战

1. I2C模块寄存器全景解析:从通信基石到高效驱动搞嵌入式开发,尤其是和各类传感器、存储芯片打交道,I2C总线绝对是绕不开的“老朋友”。它用两根线(SDA数据线和SCL时钟线)就能搞定一堆外设的通信,硬件设计简…

2026/7/21 16:09:43阅读更多 →
threepp项目实战:机器人仿真与控制系统开发

threepp项目实战:机器人仿真与控制系统开发

threepp项目实战:机器人仿真与控制系统开发 【免费下载链接】threepp A cross-platform C20 3D library with the high-level API of three.js 项目地址: https://gitcode.com/gh_mirrors/th/threepp threepp是一个跨平台C20 3D库,具有three.js的…

2026/7/21 16:07:42阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →