📱 项目背景

最近,我们的个人记账应用「往来记」在提交华为应用商店审核时,收到了6个审核问题反馈。经过一周的紧张修复,我们成功解决了其中5个问题,还有1个需要设计师协助。本文将完整记录这次修复过程,希望能为其他鸿蒙应用开发者提供参考。

🔍 问题总览与修复成果

问题类型 问题数量 修复状态 修复难度
❗ 必须修复 1个 ✅ 已完成 ⭐⭐
⚠️ 建议优化 5个 4完成 + 1待办 ⭐⭐⭐

修复效率:83.3%问题已解决,剩余1个为图标资源问题需设计师协助。

💥 关键问题1:统计分析模块的测试数据

问题描述

审核发现统计分析模块包含硬编码的测试数据,这违反了华为审核指南3.4条。

修复方案

核心思路:用真实的空状态替代模拟数据

修复前代码

// 问题代码:硬编码测试数据
if (this.statistics.recordCount === 0) {
  console.info('生成测试数据用于演示');
  this.statistics = {
    totalReceived: 5000,    // 虚假数据
    totalSent: 3000,        // 虚假数据  
    netAmount: 2000,        // 虚假数据
    // ... 更多测试数据
  };
}

修复后代码

// 解决方案:真实的空状态
if (!this.statistics) {
  console.warn('统计数据为空,设置默认值');
  this.statistics = {
    totalReceived: 0,      // 真实零状态
    totalSent: 0,          // 真实零状态
    netAmount: 0,          // 真实零状态
    recordCount: 0,        // 真实零状态
    personCount: 0,        // 真实零状态
    monthlyTrend: []       // 空数组
  };
}

经验总结

  • 永远不要在生产环境使用测试数据,即使用户没有数据也要展示真实状态
  • 空状态本身就是一种重要的用户反馈
  • 考虑添加数据引导功能,鼓励用户添加首条记录

🎨 问题2&6:深色模式完整适配

问题描述

两个相关问题:深色模式下文字对比度不足、应用未完全适配系统深色模式。

技术方案

我们创建了一个统一的深色模式常量管理类:

文件结构

entry/src/main/ets/common/DarkModeConstants.ets

核心代码

export class DarkModeConstants {
  // 背景色系统
  static readonly BACKGROUND_PRIMARY_LIGHT = '#FFFFFF';
  static readonly BACKGROUND_PRIMARY_DARK = '#000000';
  static readonly BACKGROUND_CARD_DARK = '#262626';
  
  // 文字颜色系统
  static readonly TEXT_PRIMARY_LIGHT = '#000000';
  static readonly TEXT_PRIMARY_DARK = '#FFFFFF';
  static readonly TEXT_SECONDARY_DARK = '#A6A6A6';
  
  // 输入框颜色系统
  static readonly INPUT_BG_DARK = '#333333';
  static readonly INPUT_TEXT_DARK = '#FFFFFF';
  static readonly INPUT_PLACEHOLDER_DARK = '#737373';

  // 动态获取颜色方法
  static getBackgroundPrimary(isDarkMode: boolean): string {
    return isDarkMode ? this.BACKGROUND_PRIMARY_DARK : this.BACKGROUND_PRIMARY_LIGHT;
  }
  
  static getTextPrimary(isDarkMode: boolean): string {
    return isDarkMode ? this.TEXT_PRIMARY_DARK : this.TEXT_PRIMARY_LIGHT;
  }
}

对比度验证

我们严格按照WCAG 2.1 AA标准进行色彩对比度验证:

元素组合 颜色组合 对比度 标准要求 结果
主要文字 #FFFFFF ↔ #000000 21:1 ≥4.5:1 ✅ 优秀
输入框文字 #FFFFFF ↔ #333333 12.6:1 ≥4.5:1 ✅ 优秀
次要文字 #A6A6A6 ↔ #262626 5.3:1 ≥4.5:1 ✅ 合格

实现要点

  1. 使用@StorageLink监听系统主题
@StorageLink('darkMode') isDarkMode: boolean = false;
  1. 统一应用颜色
// 页面背景
.backgroundColor(DarkModeConstants.getBackgroundPrimary(this.isDarkMode))

// 文字颜色  
.fontColor(DarkModeConstants.getTextPrimary(this.isDarkMode))

// 输入框样式
TextInput({ placeholder: '请输入' })
  .fontColor(DarkModeConstants.getInputText(this.isDarkMode))
  .backgroundColor(DarkModeConstants.getInputBackground(this.isDarkMode))

📱 问题4:横竖屏切换支持

问题描述

应用在折叠屏设备上不支持横竖屏自动切换。

修复方案

修改 module.json5 配置文件:

{
  "module": {
    // 支持多种设备类型
    "deviceTypes": [
      "phone",    // 手机
      "tablet",   // 平板  
      "2in1"      // 折叠屏/二合一设备
    ],
    "abilities": [
      {
        "name": "EntryAbility",
        "orientation": "auto_rotation",  // 关键:启用自动旋转
        // ... 其他配置
      }
    ]
  }
}

适配效果

  • ✅ Mate X5 折叠屏设备完美支持
  • ✅ 横屏模式下布局自动调整
  • ✅ 旋转动画流畅自然

🖼 问题3:应用图标规范(待办)

问题分析

当前图标尺寸为216x216px,但华为要求提供1024x1024px的高分辨率图标。

解决方案

此问题需要设计师协助,技术团队已准备好处理流程:

  1. 资源要求

    • 前景图:1024x1024px PNG格式
    • 背景图:1024x1024px PNG格式(可选)
  2. 工具要求

    • DevEco Studio 5.0.5.315或更高版本
    • 使用内置的「Create App Icon」功能
  3. 处理流程

    设计师提供1024px图标 → 导入DevEco Studio → 
    自动生成多分辨率资源 → 替换media目录文件
    

🛠 技术收获

1. 深色模式适配最佳实践

  • 提前规划:在项目初期就考虑深色模式支持
  • 统一管理:创建颜色常量类维护色彩系统
  • 对比度验证:使用专业工具检查色彩可访问性
  • 渐进增强:从核心页面开始,逐步覆盖所有界面

2. 多设备适配策略

  • 声明式配置:在module.json5中正确声明设备支持
  • 响应式布局:使用自适应布局组件
  • 测试覆盖:确保在真实设备上测试各种场景

3. 审核准备技巧

  • 自查清单:提交前按照审核指南逐项检查
  • 真实数据:移除所有测试和模拟数据
  • 规范遵循:严格遵循华为UX设计规范

📈 性能影响评估

本次修复对应用性能的影响微乎其微:

  • 包体积:增加约2KB(颜色常量类)
  • 运行时性能:无感知影响
  • 内存占用:颜色切换几乎不占用额外内存

🎯 后续优化计划

短期计划(v1.0.2)

  • 完成1024x1024px图标资源更新
  • 全面测试深色模式所有页面
  • 验证横竖屏切换的用户体验

中期计划(v1.1.0)

  • 为所有页面添加深色模式支持
  • 优化大屏设备的横屏布局
  • 添加更多无障碍功能

长期规划

  • 建立完整的设计系统
  • 实现动态主题切换
  • 支持高对比度模式

💡 给开发者的建议

通过这次修复经历,我们总结了以下几点建议:

  1. 审核前自查:使用华为提供的审核指南作为检查清单
  2. 深色模式早做:不要等到最后才添加深色模式支持
  3. 设备覆盖测试:至少在两种不同设备上测试应用
  4. 规范文档常看:华为的UX设计规范是很好的参考资源
  5. 用户真实体验:始终从真实用户的角度思考问题

🔗 参考资料

🎊 结语

这次华为应用审核问题的修复过程,虽然紧张但收获颇丰。我们不仅解决了当前问题,还建立了一套完善的深色模式和多设备适配体系。希望我们的经验能够帮助到正在或即将面临类似挑战的开发者们。

关键体会:遵循平台规范不是限制,而是提升应用品质的机会。每一次审核反馈都是让应用变得更好的契机。

附:鸿蒙学习资源直达链接

https://developer.huawei.com/consumer/cn/training/classDetail/cfbdfcd7c53f430b9cdb92545f4ca010?type=1?ha_source=hmosclass&ha_sourceId=89000248

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐