HarmonyOS APP实战-基于Image Kit的图像处理APP - 第13篇:打包发布与总结

1. 开篇

在上一篇(第12篇)中,我们重点解决了性能优化与资源释放问题:通过ImageSource的采样参数setDesiredRegionsetDesiredSize实现大图降采样,降低内存占用;在处理链路的每个环节(旋转、裁剪、滤镜等)完成后主动调用PixelMap.release()释放中间对象;同时使用弱引用和try/finally确保异常安全。经过优化,应用在编辑大尺寸图片时不再出现显式OOM,操作流畅度提升明显。

现在工程已经具备了完整且稳定的图像处理能力,是时候将其打包成可发布的HAP包,上架到AppGallery。本篇将完成应用签名的配置、自动化打包脚本的编写,并汇总最终的ReleaseNotes。最后,对整个13篇系列进行技术总结,回顾从零构建一个HarmonyOS图像处理APP的全过程,并给出后续可拓展的方向。

2. 核心实现

2.1 App签名配置

HarmonyOS应用在安装前必须经过数字签名,签名文件可以通过DevEco Studio的 Build → Generate Key and CSR 生成,也可以使用已有的.p12证书。签名配置存储在build-profile.json5中。

代码块1:签名配置文件 build-profile.json5(位于AppScope根目录)

{
  "apiType": "stageMode",
  "buildOption": {
    "artifactType": "hap"
  },
  "signingConfigs": [
    {
      "name": "release",                                          // 签名配置名称,用于后续引用
      "type": "HarmonyOS",                                        // 签名类型,固定为HarmonyOS
      "material": {
        "keyStoreFile": "C:/cert/imageapp_release.p12",           // p12证书文件路径
        "certPath": "C:/cert/imageapp_release.cer",               // 证书文件路径(.cer)
        "keyPwd": "YourKeyPassword",                              // 证书私钥密码
        "keystorePwd": "YourKeystorePassword",                    // 证书库密码
        "materialName": "imageapp",                               // 证书中的KeyAlias
        "signAlg": "SHA256withECDSA"                              // 签名算法,推荐使用SHA256withECDSA
      },
      "provisioningProfile": "C:/cert/imageapp_release.p7b"       // 描述文件(.p7b)
    }
  ]
}

关键点说明:

  • 证书和描述文件需在AppGallery Connect中申请。开发调试时可使用“自动签名”模式(DevEco Studio自动生成),上架时必须使用正式签名。
  • signAlg 建议使用 SHA256withECDSA,兼容性更好。
  • materialName 对应生成证书时输入的Key Alias。
  • 不要将包含密码的配置文件提交到版本控制,建议通过环境变量注入。

在这里插入图片描述

2.2 打包脚本

使用DevEco Studio内置的hvigorw命令行工具,可以一键构建HAP包。编写一个Shell脚本,方便CI/CD集成。

代码块2:打包脚本 build_hap.sh

#!/bin/bash
# 图像处理APP打包脚本
# 使用方式: ./build_hap.sh [release|debug]

set -e

PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
BUILD_MODE="${1:-release}"
OUTPUT_DIR="${PROJECT_DIR}/build/output/${BUILD_MODE}"

echo "==================== 开始构建图像处理APP ===================="
echo "构建模式: ${BUILD_MODE}"
echo "项目路径: ${PROJECT_DIR}"

# 1. 进入项目根目录
cd "${PROJECT_DIR}"

# 2. 清理上次构建产物
echo ">>> 清理上次构建..."
./hvigorw clean --mode="${BUILD_MODE}" -p product=default --no-daemon

# 3. 运行单元测试(如有)
# echo ">>> 运行测试..."
# ./hvigorw test --mode="${BUILD_MODE}" --no-daemon

# 4. 构建HAP包
echo ">>> 开始打包..."
./hvigorw assembleHap --mode="${BUILD_MODE}" -p product=default --no-daemon

# 5. 检查输出
if [ -d "${OUTPUT_DIR}" ]; then
    echo ">>> 构建完成,产物目录: ${OUTPUT_DIR}"
    ls -lh "${OUTPUT_DIR}"/*.hap 2>/dev/null || echo "   未找到HAP文件"
else
    echo ">>> 错误:输出目录不存在,构建可能失败"
    exit 1
fi

echo "==================== 构建结束 ===================="

关键点说明:

  • hvigorw 位于项目根目录,由DevEco Studio创建项目时自动生成。
  • assembleHap 是构建HAP包的任务。
  • --mode=release 会使用build-profile.json5中名为release的签名配置;--mode=debug使用调试证书。
  • 可在CI流水线中调用此脚本,实现自动化打包。
  • 若需要生成App Pack(.app文件用于上架),可执行assembleApp任务。

在这里插入图片描述

2.3 AppGallery服务检查模块(可选功能)

在应用首屏或“关于”页面中,可以检查当前设备是否支持AppGallery,用于后续版本更新提示。这里使用@ohos.app.appGallery模块。

代码块3:AppGallery可用性检查器 AppGalleryChecker.ets

// AppGalleryChecker.ets
// 检查当前设备是否安装了AppGallery客户端,用于后续引导用户更新或评分
import { appGallery } from '@ohos.app.appGallery';   // 导入AppGallery模块

/**
 * 检查AppGallery可用性
 * @returns true表示AppGallery可用,false不可用
 */
export function isAppGalleryAvailable(): boolean {
  try {
    // appGallery.isAppGalleryAvailable() 同步返回布尔值
    const available: boolean = appGallery.isAppGalleryAvailable();
    console.info(`[AppGalleryChecker] AppGallery可用状态: ${available}`);
    return available;
  } catch (error) {
    console.error(`[AppGalleryChecker] 检查AppGallery失败: ${JSON.stringify(error)}`);
    return false;
  }
}

/**
 * 监听应用安装/卸载事件(可选)
 * @param callback 事件回调,参数为事件类型字符串
 */
export function watchAppGalleryEvent(callback: (event: string) => void): void {
  try {
    appGallery.on('appInstall', (data) => {
      console.info(`[AppGalleryChecker] 安装事件: ${JSON.stringify(data)}`);
      callback('install');
    });
    appGallery.on('appUninstall', (data) => {
      console.info(`[AppGalleryChecker] 卸载事件: ${JSON.stringify(data)}`);
      callback('uninstall');
    });
    console.info('[AppGalleryChecker] AppGallery事件监听已注册');
  } catch (error) {
    console.error(`[AppGalleryChecker] 注册监听失败: ${JSON.stringify(error)}`);
  }
}

关键点说明:

  • @ohos.app.appGallery 模块提供了isAppGalleryAvailable()on(event, callback)等API。
  • 该模块仅在真机(搭载AppGallery的设备)上有效,模拟器中可能返回false
  • 注册事件监听后,需要在页面销毁时调用appGallery.off(event)取消监听,防止内存泄漏。
  • 此功能可用于“检查更新”按钮:若AppGallery可用,则跳转到AppGallery详情页;否则提示手动下载。

2.4 ReleaseNotes 示例

在发布前编写ReleaseNotes.md,记录版本号和变更内容。

# 图像处理APP v1.0.0 Release Notes

## 功能特性
- 图片选择:支持从相册或文件管理器选择图片
- 基础编辑:缩放、裁剪、旋转、翻转
- 滤镜效果:灰度、怀旧、冷色、暖色等预设滤镜
- 色彩调节:亮度、对比度、饱和度独立滑块调整
- 水印叠加:支持文字和图标水印,可拖动位置
- 批量处理:多图编辑,统一应用裁切/滤镜
- 历史记录:支持撤销/重做,最多50步
- 性能优化:大图降采样、及时释放资源,内存占用降低60%

## 兼容性
- HarmonyOS API 11 及以上
- 支持手机、平板

## 已知问题
- 滤镜色彩矩阵在部分低端设备上渲染稍慢(已调优)
- 水印字体仅在系统支持的中文字体范围内有效

## 安装方式
- 通过AppGallery搜索“图像处理”下载安装
- 或使用本HAP包通过DevEco Studio安装到设备

3. 运行验证

  1. 签名配置验证:在DevEco Studio中打开build-profile.json5,确认签名物料路径正确。然后点击 Build → Build Hap(s),选择release模式,观察控制台输出。若成功,会在build/output/release目录生成entry-default-release.hap
    在这里插入图片描述

  2. 打包脚本验证:打开终端,进入项目根目录,执行./build_hap.sh release。等待脚本完成,查看输出目录下的HAP包大小(通常2~5MB)。
    在这里插入图片描述

  3. AppGallery检查功能:将HAP包安装到真机(需支持AppGallery),打开应用的“关于”页面,点击“检查更新”按钮,观察日志输出AppGallery可用状态: true。若在模拟器中运行,显示false

4. 小结与系列总结

本篇完成了图像处理APP的最后一步:配置了正式签名(build-profile.json5),编写了自动化打包Shell脚本(build_hap.sh),并添加了AppGallery可用性检查模块(AppGalleryChecker.ets)。至此,一个功能完整、性能优化的图像处理APP具备了上架条件。结合ReleaseNotes,我们清楚掌握了版本发布的标准流程。

在这里插入图片描述

系列总结:从零到一的HarmonyOS图像处理APP

经过13篇的实战,我们完成了一个完整的HarmonyOS原生图像处理应用。以下是核心收获与回顾:

阶段 核心模块 使用的Image Kit API
环境搭建 项目创建、权限配置
图片选择 PhotoViewPicker @ohos.multimedia.photoAccessHelper
解码与元信息 ImageSource解码 createImageSourcegetImageInfo
缩放裁剪 PixelMap变形 scalecrop
旋转翻转 几何变换 rotateflip
滤镜 色彩矩阵 setColorMatrix
亮度对比度饱和度 像素级调整 setColorMatrix配自定义矩阵
编码导出 ImagePacker createImagePackerpacking
批量处理与历史 堆栈数据结构
水印 Canvas合成 Canvas.drawImage
本地存储 Preferences @ohos.data.preferences
性能优化 采样、释放 setDesiredSizerelease
打包发布 签名、脚本、AppGallery @ohos.app.appGallery

Image Kit核心经验

  • 所有图片处理操作均基于PixelMap,它是内存中的位图表示。
  • createImageSource负责解码,createImagePacker负责编码,二者成对使用。
  • setColorMatrix是强大的色彩调节工具,通过4×5矩阵可实现滤镜和亮度/对比度/饱和度。
  • 大图处理必须使用setDesiredSize降采样,否则极易内存溢出。
  • 每个PixelMap对象在使用后必须release(),建议搭配try/finallyDisposable模式。

可拓展方向

  1. 扩展滤镜库:集成更多色彩矩阵,甚至通过C++原生实现GPU加速。
  2. 人脸识别:接入Camera KitML Kit实现人脸美颜。
  3. 动效集成:为滤镜切换添加过渡动画(使用animateTo)。
  4. 云存储:将编辑后的图片同步到华为云盘。

至此,本系列全部结束。希望你能跟随每一步代码,亲手构建出属于自己的图像处理APP。如果在实战中遇到问题,欢迎在评论区交流。感谢阅读!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐