起因:被用户“逼”上鸿蒙
我的小应用「Focus Timer」(番茄工作法工具)在华为应用市场上架两年,累计12万用户。6月15日,后台收到第37条同类反馈:
“升级HarmonyOS NEXT后打不开了,求适配!”
翻看华为开发者联盟邮件——2024年10月起,应用市场将仅收录鸿蒙原生应用。没得选,干。
第一天:环境搭建与“灵魂拷问”
工具链实测
- DevEco Studio 4.1.3.500(官网下载,非Beta版)
- SDK版本:API 10(HarmonyOS NEXT)
- 硬件:MateBook X Pro 2023(i7/16GB) + Mate 60 Pro(真机调试)
踩坑记录:
- 安装时提示“Node.js版本冲突”——卸载系统自带Node 18,改用DevEco内置Node 16.19.1(设置→SDK→Node.js)
- 模拟器启动失败:关闭Hyper-V(Windows功能),重启后模拟器秒开
- 关键发现:PC端模拟器分辨率可自定义!我设为2560×1600(接近MateBook屏幕比例),为后续PC适配埋伏笔
💡 建议:首次创建项目时勾选“支持多设备”,自动包含phone/tablet/desktop模板
第二天:代码迁移——从Java到ArkTS的“翻译”现场
核心模块改造对比
| 原Android逻辑 | 鸿蒙原生实现 | 耗时 |
|---|---|---|
| Handler计时 | Timer+@State响应式更新 | 2.5h(文档示例直接套用) |
| SharedPreferences存设置 | @StorageLink持久化 | 0.5h(声明即同步,真香) |
| 悬浮窗权限申请 | windowStage.loadContent+ 权限声明 | 3h(需在config.json添加"ohos.permission.SYSTEM_FLOAT_WINDOW") |
真实代码片段(计时器核心):
// ArkTS实现:状态驱动,无需手动刷新UI@StateremainingSec:number=1500;// 25分钟startTimer(){this.timer=setInterval(()=>{if(this.remainingSec>0){this.remainingSec--;// UI自动重绘}else{clearInterval(this.timer);// 调用系统通知(已封装)this.showNotification("专注时间到!");}},1000);}痛点实录:
- 原Android的AlarmManager后台保活逻辑失效 → 改用
WorkScheduler定时任务(需用户授权“后台活动”) - 第11次编译报错:
TypeError: Cannot read property 'duration' of undefined→ 检查发现JSON配置里漏了逗号(ArkTS对格式零容忍)
第三天:跨端适配——让APP“认得”PC屏幕
三步实现PC模拟器运行
- 布局重构:
// 使用@media查询适配不同屏幕@Buildercontent(){Column(){// 手机:垂直布局 | PC:左侧计时器+右侧统计面板if(windowClass==="desktop"){Row(){timerPanel();statsPanel()}.width('100%')}else{Column(){timerPanel();statsPanel()}}}} - 交互优化:
- 手机:点击按钮触发
- PC模拟器:为按钮添加
onHover效果(鼠标悬停变色)
- 真机验证:
- 手机端:安装包体积从8.2MB→5.7MB(方舟编译器优化)
- PC模拟器:2560×1600分辨率下,字体清晰无模糊,拖拽窗口实时重绘
性能实测数据(Mate 60 Pro vs 模拟器)
| 指标 | 迁移前(Android版) | 鸿蒙原生版 |
|---|---|---|
| 冷启动时间 | 1.82s | 1.35s(↓26%) |
| 计时内存占用 | 48MB | 39MB(↓19%) |
| 后台存活率(锁屏10分钟) | 63% | 92%(系统级任务调度优化) |
📸 附:PC模拟器运行截图(文字描述)
左侧圆形计时器占屏40%,右侧柱状图展示今日专注时长;窗口右上角有“最小化到托盘”按钮(调用windowStage.minimize()实现)
用户反馈:比预想更“狠”
将测试包发给10个种子用户(含3位PC办公族):
- 好评:
“手机计时到一半,碰一碰MateBook,进度直接续上!写论文救星!”(用户@码农小张)
“PC版统计面板能直接拖到副屏,再也不用切窗口看数据了”(用户@设计师莉莉) - 吐槽:
“桌面端缺少全局快捷键(如Ctrl+Space开始计时)” → 已记入v1.1需求(查文档发现需用
keyEvent监听,下周加)
写给观望者的3句大实话
- 迁移成本真实存在:
- 简单工具类APP:3-5人日(有TS基础)
- 复杂游戏:需重写渲染逻辑(参考《元气骑士》团队分享:耗时2个月适配ArkGraphics)
- PC不是“放大版手机”:
- 必须用
@ohos.windowAPI处理窗口事件 - 用户期待键盘/鼠标交互(别只做触屏适配)
- 必须用
- 红利确实在:
- 应用市场上架审核提速(我的包2小时过审)
- “鸿蒙原生”标签带来自然流量增长(测试期新增用户+18%)
结语:技术没有神话,只有解决问题
没有谈“万物互联”,没有画“生态蓝图”。
我只是修好了一个打不开的番茄钟,顺手让它在电脑上也能用。
用户收到更新推送后回了句:“终于能边写代码边计时了,谢了。”
——这大概就是开发者最实在的成就感。
附:避坑清单
- 模拟器调试前:关闭所有杀毒软件(曾被360拦截SDK进程)
- 真机调试:用USB 3.0接口!USB 2.0传输APK慢到想哭
- 文档首选:华为开发者联盟官网→“HarmonyOS开发”→“API参考”(比社区帖子靠谱10倍)
项目已开源:github.com/yourname/focus-timer-harmony(含PC适配分支)
设备信息:DevEco Studio 4.1.3.500 | API 10 | 测试机型:Mate 60 Pro