HarmonyOS智慧农业管理应用开发教程--高高种地-- 第33篇:应用打包、签名与发布
🎉恭喜!您已完成全部33篇教程!完整的项目开发流程地图SDK的深度集成AI能力的实际应用应用架构设计思想最佳实践和优化技巧祝您开发顺利,应用成功!🚀📧 邮箱:support@gaogaozhongdi.com🌐 官网:www.gaogaozhongdi.comHarmonyOS开发者论坛教程编写时间适用版本作者:高高种地开发团队教程完成度:33/33篇(100%)✅。
第33篇:应用打包、签名与发布
📚 本篇导读
应用打包、签名与发布是应用开发的最后环节,也是将应用交付给用户的关键步骤。本篇教程将详细介绍HarmonyOS应用的完整发布流程。
本篇将实现:
- 📦 应用打包(生成HAP/APP包)
- 🔐 应用签名(配置签名证书)
- 🚀 应用发布(上架应用市场)
- 📝 版本管理(版本号规划、更新策略)
- 🔄 持续集成(自动化构建和发布)
- 📊 发布后运营(数据分析、用户反馈)
🎯 学习目标
完成本篇教程后,你将掌握:
- 如何配置应用签名
- 如何打包生成发布版本
- 应用市场上架流程
- 版本号管理和更新策略
- 持续集成和自动化发布
- 应用发布后的运营维护
一、应用签名配置
1.1 签名证书类型
HarmonyOS应用签名分为两种:
- 调试签名:用于开发和测试阶段
- 发布签名:用于正式发布到应用市场
1.2 生成签名证书
1.2.1 在AGC创建应用
- 登录 AppGallery Connect
- 点击"我的项目" → “创建项目”
- 填写项目信息并创建
- 在项目中添加应用
1.2.2 生成证书请求文件
在DevEco Studio中:
- 打开菜单:Build → Generate Key and CSR
- 填写信息:
- Key Alias: release-key
- Password: 设置密码
- Validity: 25(年)
- Organization: 公司名称
- Common Name: 应用名称
- 生成文件:
- .p12文件(密钥库)
- .csr文件(证书请求)
1.2.3 申请发布证书
- 在AGC中进入应用详情
- 点击"证书管理" → “申请证书”
- 上传.csr文件
- 下载.cer证书文件
1.2.4 生成Profile文件
- 在AGC中点击"Profile管理"
- 创建新的Profile
- 选择应用和证书
- 下载.p7b文件
1.3 配置签名信息
1.3.1 在项目中配置
在 build-profile.json5 中配置签名:
{
"app": {
"signingConfigs": [
{
"name": "release",
"type": "HarmonyOS",
"material": {
"certpath": "path/to/release.cer",
"storePassword": "your_password",
"keyAlias": "release-key",
"keyPassword": "your_password",
"profile": "path/to/release.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "path/to/release.p12"
}
}
],
"compileSdkVersion": 17,
"compatibleSdkVersion": 17,
"products": [
{
"name": "default",
"signingConfig": "release"
}
]
}
}
1.3.2 使用环境变量
为了安全,建议使用环境变量存储密码:
{
"material": {
"storePassword": "${STORE_PASSWORD}",
"keyPassword": "${KEY_PASSWORD}"
}
}
二、应用打包
2.1 配置应用信息
2.1.1 配置app.json5
文件位置:AppScope/app.json5
{
"app": {
"bundleName": "com.gaogao.zhongdi",
"vendor": "高高种地团队",
"versionCode": 1000000,
"versionName": "1.0.0",
"icon": "$media:app_icon",
"label": "$string:app_name",
"description": "$string:app_description",
"minAPIVersion": 12,
"targetAPIVersion": 17,
"apiReleaseType": "Release"
}
}
4.2 灰度发布
4.2.1 配置灰度策略
在AGC中配置灰度发布:
- 选择版本 → 灰度发布
- 设置灰度比例(如5%、10%、50%)
- 选择灰度用户群体
- 监控灰度数据
- 逐步扩大范围
4.2.2 灰度监控指标
- 崩溃率
- 启动时间
- 用户反馈
- 功能使用率
- 性能指标
五、持续集成与自动化
5.1 配置CI/CD
5.1.1 使用Jenkins
pipeline {
agent any
stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo/gaogao-zhongdi.git'
}
}
stage('Build') {
steps {
sh 'hvigorw clean'
sh 'hvigorw assembleApp --mode module -p buildMode=release'
}
}
stage('Test') {
steps {
sh 'hvigorw test'
}
}
stage('Sign') {
steps {
// 签名步骤
sh 'sign-app.sh'
}
}
stage('Upload') {
steps {
// 上传到应用市场
sh 'upload-to-agc.sh'
}
}
}
post {
success {
echo 'Build and deploy successful!'
}
failure {
echo 'Build failed!'
}
}
}
5.2 自动化脚本
5.2.1 构建脚本
#!/bin/bash
# build.sh
echo "开始构建..."
# 清理
hvigorw clean
# 构建
hvigorw assembleApp --mode module -p product=default -p buildMode=release
# 检查构建结果
if [ $? -eq 0 ]; then
echo "构建成功!"
echo "输出文件: entry/build/outputs/default/entry-default-signed.hap"
else
echo "构建失败!"
exit 1
fi
5.2.2 版本号自动更新
#!/bin/bash
# update-version.sh
# 读取当前版本
CURRENT_VERSION=$(grep "versionName" AppScope/app.json5 | cut -d'"' -f4)
# 解析版本号
IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION"
MAJOR=${VERSION_PARTS[0]}
MINOR=${VERSION_PARTS[1]}
PATCH=${VERSION_PARTS[2]}
# 增加修订号
PATCH=$((PATCH + 1))
# 新版本号
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
NEW_VERSION_CODE=$((MAJOR * 1000000 + MINOR * 1000 + PATCH))
# 更新文件
sed -i "s/\"versionName\": \"$CURRENT_VERSION\"/\"versionName\": \"$NEW_VERSION\"/" AppScope/app.json5
sed -i "s/\"versionCode\": [0-9]*/\"versionCode\": $NEW_VERSION_CODE/" AppScope/app.json5
echo "版本号已更新: $CURRENT_VERSION -> $NEW_VERSION"
六、发布后运营
6.1 数据分析
6.1.1 关键指标
- 下载量:应用下载次数
- 活跃用户:日活(DAU)、月活(MAU)
- 留存率:次日留存、7日留存、30日留存
- 使用时长:平均使用时长
- 崩溃率:应用崩溃频率
6.1.2 使用AGC分析
在AGC中查看:
- 进入"质量" → “应用质量”
- 查看崩溃报告
- 分析用户行为
- 监控性能指标
6.2 用户反馈处理
6.2.1 反馈渠道
- 应用市场评论
- 应用内反馈功能
- 客服邮箱
- 用户社群
6.2.2 反馈处理流程
- 收集反馈:定期查看各渠道反馈
- 分类整理:按问题类型分类
- 优先级排序:紧急问题优先处理
- 及时响应:24小时内回复用户
- 跟踪解决:记录问题处理进度
6.3 版本迭代规划
6.3.1 迭代周期
- 大版本:3-6个月,重大功能更新
- 小版本:1-2个月,新增功能
- 修订版本:随时,bug修复
6.3.2 需求来源
- 用户反馈和建议
- 数据分析发现的问题
- 市场竞品分析
- 技术升级需求
- 业务发展需要
七、常见问题
7.1 签名配置问题
问题:签名配置错误导致打包失败
解决方案:
- 检查证书文件路径
- 验证密码是否正确
- 确认Profile文件有效期
- 查看详细错误日志
7.2 审核被拒
问题:应用提交审核后被拒绝
解决方案:
- 仔细阅读拒绝原因
- 按要求修改应用
- 补充必要的说明文档
- 重新提交审核
7.3 更新失败
问题:用户更新应用失败
解决方案:
- 检查版本号配置
- 验证签名一致性
- 确保向下兼容
- 提供降级方案
八、本篇小结
本篇教程介绍了应用打包、签名与发布的完整流程:
✅ 应用签名:证书申请、签名配置
✅ 应用打包:版本配置、构建发布版本
✅ 应用发布:准备材料、上架流程
✅ 版本管理:更新策略、灰度发布
✅ 持续集成:自动化构建和发布
✅ 发布运营:数据分析、用户反馈
核心技术点:
- HarmonyOS应用签名机制
- 应用打包和构建流程
- AppGallery Connect使用
- 版本号管理规范
- CI/CD自动化部署
最佳实践:
- 妥善保管签名证书
- 规范版本号管理
- 完善应用信息和截图
- 及时响应用户反馈
- 建立自动化发布流程
九、教程系列总结
🎉 恭喜!您已完成全部33篇教程!
9.1 学习回顾
通过本系列教程,您已经掌握:
基础篇(1-3篇):
- HarmonyOS开发环境搭建
- 应用架构设计
- UI组件库开发
核心功能篇(4-15篇):
- 引导流程和用户画像
- 地图集成和地块管理
- 作物管理和农事记录
- 任务管理和成本核算
- 数据分析和智能决策
- 地图导航和路线规划
AI能力篇(16-23篇):
- HarmonyOS AI能力集成
- 图像识别功能
- 语音合成功能
- 天气服务和节气指导
- 智能推荐系统
学习考试篇(24-27篇):
- 课程体系设计
- 考试系统开发
- 成绩分析功能
服务扩展篇(28-31篇):
- 用户中心和个人资料
- 数据管理与备份
- 设置与帮助系统
- 桌面小组件开发
优化发布篇(32-33篇):
- 应用测试和优化
- 应用打包和发布
9.2 项目特色
"高高种地"项目的核心特色:
🗺️ 以地图为核心:应用首页即为地图,所有功能围绕地图展开
🤖 AI能力深度集成:图像识别、语音播报等AI功能
🌾 完整业务流程:涵盖农业管理全流程
📚 学习考试系统:提供专业知识学习和考试
📊 智能决策支持:数据分析和智能推荐
9.3 后续学习建议
-
深入学习HarmonyOS:
- 分布式能力
- 多设备协同
- 服务卡片高级功能
-
扩展应用功能:
- 社区功能
- 电商功能
- 物联网设备接入
-
性能优化:
- 深度性能优化
- 用户体验提升
- 代码质量改进
-
持续学习:
- 关注HarmonyOS更新
- 学习最佳实践
- 参与开发者社区
📖 参考资料
🎓 结语
感谢您完成"高高种地"HarmonyOS智慧农业管理应用开发教程!
希望通过这33篇教程,您不仅学会了HarmonyOS应用开发,还掌握了:
- 完整的项目开发流程
- 地图SDK的深度集成
- AI能力的实际应用
- 应用架构设计思想
- 最佳实践和优化技巧
祝您开发顺利,应用成功! 🚀
如有问题或建议,欢迎通过以下方式联系我们:
- 📧 邮箱:support@gaogaozhongdi.com
- 🌐 官网:www.gaogaozhongdi.com
- 💬 开发者社区:HarmonyOS开发者论坛
教程编写时间:2024-01-22
适用版本:HarmonyOS NEXT API 17+
作者:高高种地开发团队
教程完成度:33/33篇(100%)✅
2.1.2 版本号规范
版本号格式:主版本号.次版本号.修订号
- 主版本号:重大功能更新或架构变更
- 次版本号:新增功能或较大改进
- 修订号:Bug修复或小优化
示例:
- 1.0.0:首次发布
- 1.1.0:新增AI识别功能
- 1.1.1:修复定位问题
versionCode规则:
versionCode = 主版本号 * 1000000 + 次版本号 * 1000 + 修订号
例如:1.2.3 → 1002003
2.2 构建发布版本
2.2.1 使用DevEco Studio构建
- 选择构建类型:Build → Build Hap(s)/APP(s) → Build APP(s)
- 选择签名配置:release
- 等待构建完成
- 查看输出文件:build/outputs/app/release/
2.2.2 使用命令行构建
# 清理项目
hvigorw clean
# 构建发布版本
hvigorw assembleApp --mode module -p product=default -p buildMode=release
# 输出位置
# entry/build/outputs/default/entry-default-signed.hap
2.3 验证打包结果
2.3.1 检查包内容
# 解压HAP包查看内容
unzip entry-default-signed.hap -d hap_content
# 查看目录结构
tree hap_content
2.3.2 验证签名
# 使用工具验证签名
java -jar hap-sign-tool.jar verify-app -inFile entry-default-signed.hap
三、应用市场发布
3.1 准备发布材料
3.1.1 应用信息
- 应用名称:高高种地
- 应用简介:智慧农业管理平台(50字以内)
- 应用描述:详细介绍应用功能和特色(500-2000字)
- 应用分类:工具 → 生活服务
- 适用年龄:3+
3.1.2 应用截图
准备5-8张应用截图:
- 尺寸:1080x1920或更高
- 格式:PNG或JPG
- 内容:展示主要功能界面
截图建议:
- 地图首页(展示核心功能)
- 地块管理(展示管理功能)
- AI识别(展示AI能力)
- 数据分析(展示智能决策)
- 学习中心(展示学习功能)
3.1.3 应用图标
- 尺寸:512x512px
- 格式:PNG(透明背景)
- 要求:清晰、美观、符合品牌形象
3.1.4 隐私政策
准备完整的隐私政策文档,包括:
- 收集的信息类型
- 信息使用方式
- 信息存储和保护
- 用户权利说明
- 联系方式
3.2 上架流程
3.2.1 创建应用
- 登录 AppGallery Connect
- 进入"分发" → “应用发布”
- 点击"创建应用"
- 填写基本信息
3.2.2 上传安装包
- 进入应用详情
- 点击"版本信息" → “软件版本”
- 上传HAP/APP文件
- 填写版本说明
3.2.3 填写应用信息
基本信息:
- 应用名称
- 应用简介
- 应用描述
- 应用分类
- 标签关键词
图片素材:
- 应用图标
- 应用截图
- 宣传图(可选)
联系方式:
- 客服邮箱
- 客服电话
- 官方网站
3.2.4 配置权限说明
说明应用需要的权限及用途:
- 定位权限:用于获取地块位置
- 相机权限:用于拍照识别植物
- 存储权限:用于保存图片和数据
3.2.5 提交审核
- 检查所有信息是否完整
- 阅读并同意发布协议
- 点击"提交审核"
- 等待审核结果(通常1-3个工作日)
3.3 审核注意事项
3.3.1 常见审核问题
- 功能不完整:确保所有功能正常可用
- 隐私政策缺失:必须提供隐私政策
- 权限说明不清:详细说明权限用途
- 截图不符:截图必须真实反映应用功能
- 内容违规:不得包含违法违规内容
3.3.2 审核加速技巧
- 提供完整的测试账号
- 详细的功能说明文档
- 清晰的操作指引
- 及时响应审核反馈
四、版本更新管理
4.1 版本更新策略
4.1.1 更新类型
- 强制更新:修复严重bug或安全问题
- 推荐更新:新增重要功能
- 可选更新:优化和小改进
4.1.2 更新检测
class UpdateManager {
/**
* 检查更新
*/
async checkUpdate(): Promise<UpdateInfo | null> {
try {
// 获取当前版本
const currentVersion = await this.getCurrentVersion();
// 请求服务器获取最新版本
const latestVersion = await this.getLatestVersion();
// 比较版本号
if (this.compareVersion(latestVersion.versionName, currentVersion) > 0) {
return latestVersion;
}
return null;
} catch (error) {
console.error('Check update failed:', error);
return null;
}
}
/**
* 比较版本号
*/
private compareVersion(v1: string, v2: string): number {
const parts1 = v1.split('.').map(Number);
const parts2 = v2.split('.').map(Number);
for (let i = 0; i < 3; i++) {
if (parts1[i] > parts2[i]) return 1;
if (parts1[i] < parts2[i]) return -1;
}
return 0;
}
/**
* 显示更新对话框
*/
showUpdateDialog(updateInfo: UpdateInfo): void {
AlertDialog.show({
title: '发现新版本',
message: `版本 ${updateInfo.versionName}\n\n${updateInfo.updateLog}`,
primaryButton: {
value: updateInfo.forceUpdate ? '立即更新' : '稍后',
action: () => {
if (!updateInfo.forceUpdate) {
// 可选更新,用户选择稍后
}
}
},
secondaryButton: {
value: '立即更新',
action: () => {
this.downloadUpdate(updateInfo.downloadUrl);
}
}
});
}
}
更多推荐



所有评论(0)