深入解析:【成长纪实】从Android转型到鸿蒙:我的180天AGC能力进阶之路!
我是兰瓶Coding,一枚刚踏入鸿蒙领域的转型小白,原是移动开发中级,如下是我学习笔记《零基础学鸿蒙》,若对你所有帮助,还请不吝啬的给个大大的赞~
一、起点:迷茫的转型决定
1.1 那个改变命运的决定
2024年3月15日,这是我职业生涯的一个转折点。
那天下午,我坐在公司会议室里,听着技术总监宣布:“公司决定all in鸿蒙原生开发,三个月后,我们的主力产品要全面迁移到HarmonyOS。”
会议室里一片沉默。包括我在内,团队8个人都是Android开发,对鸿蒙几乎一无所知。
我的背景:
- Android开发经验:5年
- 主要技能:Java/Kotlin、MVVM架构、Jetpack组件
- 对鸿蒙的了解:几乎为零
散会后,我打开华为开发者官网,看着ArkTS、ArkUI、AGC这些陌生的名词,心里五味杂陈:
- 担心:万一学不会怎么办?
- 焦虑:三个月够吗?
- 好奇:鸿蒙到底有什么不一样?
- 兴奋:这是不是一个新机会?
那天晚上,我在笔记本上写下了自己的180天成长计划:
目标:从Android开发者转型为鸿蒙开发者
时间:2024.03.15 - 2024.09.15(6个月)
阶段一(1-30天):基础入门
- 学习ArkTS语法
- 掌握ArkUI组件开发
- 完成第一个Hello World
阶段二(31-60天):深入实践
- 开发完整应用
- 学习鸿蒙架构设计
- 接入AGC基础能力
阶段三(61-120天):进阶突破
- 掌握AGC高级能力
- 性能优化实践
- 参与实际项目
阶段四(121-180天):专家之路
- 输出技术文章
- 参与开源贡献
- 成为团队技术担当
这份计划,我一直保存到现在。回头看,有些目标达成了,有些超额完成了,还有些走了弯路。但正是这180天,让我完成了职业生涯最重要的一次蜕变。
1.2 第一周:挫折与突破
Day 1-3:艰难的开始
我以为凭借5年Android经验,学鸿蒙应该很轻松。现实狠狠打了我的脸。
第一天配置开发环境就花了半天。DevEco Studio的界面和Android Studio完全不同,找个run按钮都要找半天。
第二天开始写代码,ArkTS的语法让我抓狂:
// 我习惯的Android写法
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
// 鸿蒙的ArkUI声明式写法(完全不一样!)
@Entry
@Component
struct Index {
build() {
Column() {
Text('Hello World')
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
.height('100%')
}
}
我盯着这段代码看了半小时:
- 为什么是struct不是class?
- build()方法里为什么没有return?
- 这个链式调用是什么鬼?
- 数据绑定在哪里?
那天晚上11点,我还在对着文档发呆。写了删,删了写,一个简单的列表页面,Android上10分钟搞定,在鸿蒙上折腾了3个小时。
Day 4:第一次"开窍"
第四天早上,我决定换个思路:忘掉Android,从零开始。
我重新看了一遍官方文档,这次没有去对比Android,而是尝试理解鸿蒙的设计哲学:
- 声明式UI:描述"要什么"而非"怎么做"
- 状态驱动:数据变化自动更新UI
- 组件化思维:一切皆组件
突然,我悟了!
@Entry
@Component
struct TodoList {
@State tasks: string[] = ['学习ArkTS', '写Demo', '看文档']
build() {
Column() {
ForEach(this.tasks, (task: string) => {
Text(task)
.fontSize(16)
.padding(10)
})
Button('添加任务')
.onClick(() => {
this.tasks.push('新任务') // 自动触发UI更新!
})
}
}
}
当我运行这段代码,点击按钮,列表自动更新的那一刻,我兴奋地喊了出来:“原来是这样!”
这种声明式的写法,比Android的命令式简洁太多了。不需要findViewById,不需要adapter,不需要notifyDataSetChanged,一切都是自动的!
Day 7:第一个完整应用
一周结束时,我完成了第一个完整的鸿蒙应用——一个简单的记事本。虽然功能简单,但包含了:
- 列表展示
- 数据添加
- 数据删除
- 本地存储
更重要的是,我找到了学习鸿蒙的感觉。
二、第一个月:AGC能力初体验
2.1 初识AGC
第二周,项目经理给我分配了第一个真实任务:“为记事本增加云同步功能”。
我的第一反应是:“需要自己搭服务器吗?”
技术总监笑着说:“不用,用AGC的CloudDB就行,几行代码搞定。”
我半信半疑地打开了AGC控制台。
第一印象:这个控制台好复杂!
界面上密密麻麻的菜单:
- 构建:认证服务、云数据库CloudDB、云存储、云函数…
- 质量:性能管理APMS、崩溃服务、云测试…
- 增长:App Linking、预加载、应用分析…
- 分发:应用内升级、远程配置…
我数了数,至少有20+个服务。作为新手,我完全不知道从哪里开始。
2.2 CloudDB:第一次感受到"真香"
按照总监的建议,我先从CloudDB开始。
困惑时刻(Day 10)
看着CloudDB的文档,我又蒙了:
- 对象类型是什么?
- Zone是什么?
- 权限怎么配置?
- 数据怎么同步?
我硬着头皮,一步步操作:
// Step 1: 定义数据对象
@Entity("Notes")
export class Note {
@PrimaryKey
@AutoGenerate
id: number;
@NotNull
title: string;
@NotNull
content: string;
@NotNull
createTime: number;
@NotNull
userId: string;
}
// Step 2: 初始化CloudDB
import cloudDatabase from '@hms/clouddb';
async initCloudDB() {
await cloudDatabase.initialize();
const config = {
zoneName: 'NotesZone',
syncProperty: cloudDatabase.SyncProperty.CLOUDDBZONE_CLOUD_CACHE
};
this.zone = await cloudDatabase.openCloudDBZone(config);
}
// Step 3: 保存数据
async saveNote(note: Note) {
await this.zone.executeUpsert('Notes', note);
}
// Step 4: 查询数据
async getNotes(userId: string) {
const query = CloudDBZoneQuery.where(Note)
.equalTo('userId', userId)
.orderByDesc('createTime');
const result = await this.zone.executeQuery(query);
return result.getSnapshotObjects();
}
震撼时刻(Day 11)
第二天,我在手机上添加了一条笔记,然后在平板上打开应用——笔记自动出现了!
我又在平板上修改了笔记——手机上几乎同时更新了!
延迟不到1秒!
我立刻意识到:这不是简单的云存储,而是实时同步!
对比我之前在Android上实现云同步的经历:
- 需要自己搭建后端服务器
- 需要实现RESTful API
- 需要处理网络请求
- 需要处理数据冲突
- 需要实现推送通知
- 至少需要2周时间
而用CloudDB,我只用了1天!
那一刻,我真正理解了BaaS(Backend as a Service)的价值。
2.3 第一次踩坑与成长
坑1:忘记创建索引导致查询慢
应用上线测试后,用户反馈笔记列表加载很慢。我查看日志,发现查询时间竟然达到了2秒!
排查后发现,我在AGC控制台创建对象类型时,忘记为userId和createTime字段创建索引。
添加索引后,查询时间从2秒降到30ms。
教训:AGC虽然简单,但基础知识还是要扎实。
坑2:数据权限配置错误
测试时发现一个严重问题:用户A能看到用户B的笔记!
原来是我没有配置数据权限规则。赶紧在AGC控制台添加:
{
"query": "userId == currentUser.uid",
"insert": "userId == currentUser.uid",
"update": "userId == currentUser.uid",
"delete": "userId == currentUser.uid"
}
教训:安全永远是第一位的,AGC提供了权限控制,一定要用好。
坑3:忽略离线场景
第一版只考虑了在线同步,用户在地铁里(无网络)时无法使用。
后来我加上了离线能力:
// 本地数据库 + CloudDB双写
async saveNote(note: Note) {
// 1. 先写本地
await this.localDB.insert(note);
// 2. 尝试同步到云端
try {
if (await this.isOnline()) {
await this.zone.executeUpsert('Notes', note);
note.syncStatus = 1; // 已同步
} else {
this.pendingSync.push(note); // 加入待同步队列
}
} catch (error) {
this.pendingSync.push(note);
}
}
// 网络恢复时同步
async syncPendingNotes() {
for (const note of this.pendingSync) {
try {
await this.zone.executeUpsert('Notes', note);
this.pendingSync.shift();
} catch (error) {
break; // 失败则等待下次重试
}
}
}
教训:移动应用一定要考虑弱网和离线场景。
2.4 第一个月总结
30天过去,我完成了:
- ✅ 掌握ArkTS基础语法
- ✅ 熟悉ArkUI组件开发
- ✅ 接入CloudDB实现云同步
- ✅ 完成第一个可用的应用
更重要的是,我开始享受鸿蒙开发的过程。
那个月末,我在技术周会上分享了我的经验,PPT标题是:《AGC CloudDB:让后端开发变得如此简单》
三、第二个月:Cloud Storage与云函数的探索
3.1 遇到新需求
第二个月开始,产品经理提了新需求:“笔记要支持插入图片”。
我的第一反应:图片存在哪里?
技术总监:“用AGC的Cloud Storage啊,专门存文件的。”
3.2 Cloud Storage实践
学习Cloud Storage的过程比CloudDB顺利多了,因为概念更简单:就是云端的文件系统。
import cloudStorage from '@hms/cloudstorage';
class ImageUploader {
async uploadImage(localPath: string, noteId: string): Promise<string> {
// 1. 压缩图片
const compressedPath = await this.compressImage(localPath);
// 2. 生成云端路径
const cloudPath = `notes/${this.userId}/${noteId}/${Date.now()}.jpg`;
// 3. 上传
const uploadTask = cloudStorage.uploadFile({
localPath: compressedPath,
cloudPath: cloudPath,
bucketName: 'notes-images'
});
// 4. 监听进度
uploadTask.onProgress((progress) => {
const percent = (progress.uploadedSize / progress.totalSize) * 100;
console.log(`Upload progress: ${percent.toFixed(2)}%`);
});
const result = await uploadTask.result();
return result.downloadUrl;
}
}
第一次看到上传进度条丝滑地从0%跑到100%,我又兴奋了。
对比Android的经历:
- Android:需要自己实现文件上传(OkHttp + MultipartBody)
- Android:需要处理断点续传
- Android:需要实现进度回调
- Android:需要管理上传队列
AGC Cloud Storage把这些都封装好了,开箱即用!
3.3 Cloud Functions:打开新世界的大门
第40天,我遇到了一个棘手的问题:需要在服务端做图片审核(过滤违规内容)。
"这…需要后端同事帮忙吗?"我问技术总监。
“不用,你自己用Cloud Functions写个云函数就行。”
**云函数?**这又是个新概念。
我打开AGC控制台,云函数 → 创建函数:
// AGC Cloud Function: imageAudit
exports.handler = async (event, context) => {
const { imageUrl, userId } = JSON.parse(event.body);
try {
// 调用华为内容审核API
const auditResult = await moderationAPI.checkImage(imageUrl);
if (auditResult.isSafe) {
// 图片安全,保存到数据库
await saveImageToDatabase(imageUrl, userId);
return {
statusCode: 200,
body: JSON.stringify({ success: true })
};
} else {
// 图片违规
return {
statusCode: 403,
body: JSON.stringify({
success: false,
reason: '图片内容违规'
})
};
}
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: error.message })
};
}
};
客户端调用:
import cloudFunction from '@hms/cloudfunction';
async function uploadImageWithAudit(imageUrl: string): Promise<boolean> {
try {
const result = await cloudFunction.call({
functionName: 'imageAudit',
data: {
imageUrl: imageUrl,
userId: this.userId
}
});
const response = JSON.parse(result.body);
return response.success;
} catch (error) {
console.error('Image audit failed:', error);
return false;
}
}
震撼时刻:我用半天时间,完成了原本需要后端同事1周才能完成的功能!
这让我意识到:云函数让前端开发者也能处理后端逻辑!
3.4 第二个月的成长
这个月,我不仅学会了新技术,更重要的是思维方式的转变:
转变1:从"命令式"到"声明式"
- Android:告诉系统"怎么做"
- 鸿蒙:告诉系统"要什么"
转变2:从"自己造轮子"到"站在巨人肩膀"
- 以前:很多功能需要自己实现
- 现在:AGC提供了丰富的能力,直接用
转变3:从"前端开发者"到"全栈开发者"
- 以前:只能写客户端代码
- 现在:通过云函数也能处理后端逻辑
四、第三个月:APMS与性能优化的修炼
4.1 性能危机
第60天,应用上线AppGallery后,用户投诉开始增加:
- “启动慢”
- “列表卡顿”
- “有时候会闪退”
我打开应用市场,评分从4.2分掉到了3.5分。心里一紧:出大问题了!
但问题是:我的测试机上一切正常!
4.2 APMS:让问题无处遁形
技术总监建议我接入APMS(应用性能管理服务)。
import apms from '@hms/apms';
// 初始化
apms.enableCollection(true);
apms.setUserIdentifier(userId);
就这么简单,3行代码。
24小时后,我打开AGC控制台的APMS面板,看到了触目惊心的数据:
崩溃率:1.2%
ANR率:0.8%
冷启动时间:3.5秒(P90)
首页加载时间:2.8秒(P90)
点开崩溃详情,我看到了完整的堆栈信息,甚至包括:
- 崩溃发生的设备型号
- 系统版本
- 崩溃前的用户操作路径
- 崩溃时的内存状态
原来问题出在这里!
崩溃top1:在低内存设备上加载大图片导致OOM
// 问题代码
async loadNoteImages(note: Note) {
// 直接加载原图(可能5MB+)
for (const imageUrl of note.images) {
const pixelMap = await image.createImageSource(imageUrl).createPixelMap();
this.imageList.push(pixelMap);
}
}
// 修复后
async loadNoteImages(note: Note) {
for (const imageUrl of note.images) {
// 根据屏幕尺寸计算合适的分辨率
const targetSize = this.calculateTargetSize();
const pixelMap = await image.createImageSource(imageUrl).createPixelMap({
desiredSize: targetSize,
desiredPixelFormat: image.PixelMapFormat.RGBA_8888
});
this.imageList.push(pixelMap);
}
// 及时释放不再使用的图片
this.cleanupUnusedImages();
}
4.3 性能优化实战
有了APMS的数据支持,我开始系统化地优化性能。
优化1:启动速度(3.5秒 → 1.2秒)
APMS的启动追踪告诉我,初始化阶段耗时2.1秒。
// 优化前:同步初始化
onCreate() {
this.initDatabase(); // 800ms
this.loadUserInfo(); // 600ms
this.loadNotesList(); // 700ms
// 总计:2100ms
}
// 优化后:异步+按需初始化
async onCreate() {
// 并行执行必需初始化
await Promise.all([
this.initDatabase(), // 800ms
this.loadUserInfo() // 600ms
]);
// 总计:800ms
// 延迟加载笔记列表
setTimeout(() => {
this.loadNotesList();
}, 500);
}
优化2:列表卡顿(帧率45fps → 58fps)
APMS显示列表滑动时帧率下降,原因是每个列表项都在渲染时加载图片。
// 优化前:渲染时加载
@Component
struct NoteItem {
build() {
Row() {
Image(this.note.coverImage) // 每次渲染都加载
.width(80)
.height(80)
}
}
}
// 优化后:使用LazyForEach + 图片缓存
@Component
struct NoteList {
build() {
List() {
LazyForEach(this.noteDataSource, (note: Note) => {
ListItem() {
NoteItem({ note: note })
}
.reuseId('note_item') // 复用列表项
})
}
.cachedCount(3) // 缓存3个
}
}
优化3:内存优化(峰值220MB → 145MB)
APMS的内存监控显示,应用运行一段时间后内存持续增长。
原来是图片缓存没有上限,导致内存泄漏。
class ImageCache {
private readonly MAX_CACHE_SIZE = 50 * 1024 * 1024; // 50MB
private currentSize = 0;
private cache = new Map();
async add(key: string, pixelMap: image.PixelMap) {
const size = this.getPixelMapSize(pixelMap);
// 检查是否需要清理
if (this.currentSize + size > this.MAX_CACHE_SIZE) {
await this.evictLRU(size);
}
this.cache.set(key, { pixelMap, size, lastAccess: Date.now() });
this.currentSize += size;
}
private async evictLRU(requiredSize: number) {
// 按最近访问时间排序,移除最久未访问的
const entries = Array.from(this.cache.entries())
.sort((a, b) => a[1].lastAccess - b[1].lastAccess);
let freedSize = 0;
for (const [key, value] of entries) {
await value.pixelMap.release();
this.cache.delete(key);
this.currentSize -= value.size;
freedSize += value.size;
if (freedSize >= requiredSize) break;
}
}
}
4.4 云测试:提前发现问题
经历了线上事故后,我意识到测试覆盖不足。
AGC的云测试服务让我眼前一亮:700+款真机,在线测试!
我上传应用包,选择了50款主流设备进行兼容性测试。
测试结果让我冷汗直流:
- 通过率:64%
- 崩溃设备:18台
- 黑屏设备:3台
点开详情,发现了很多我测试机上没有的问题:
- 某品牌低端机内存不足崩溃
- 折叠屏适配问题导致UI错位
- 特定系统版本的API兼容性问题
我花了一周时间修复这些问题,再次测试,通过率提升到94%。
教训:自己的几台测试机远远不够,云测试是必需的!
4.5 第三个月收获
经过性能优化,应用数据全面改善:
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| 崩溃率 | 1.2% | 0.09% | ⬆️ 92.5% |
| 启动时间 | 3.5s | 1.2s | ⬆️ 65.7% |
| 列表帧率 | 45fps | 58fps | ⬆️ 28.9% |
| 内存占用 | 220MB | 145MB | ⬇️ 34.1% |
应用市场评分从3.5分回升到4.6分,用户好评如潮。
更重要的是,我学会了:
- 数据驱动的性能优化方法
- 使用APMS精准定位问题
- 云测试提前发现兼容性问题
五、第四-六个月:深度探索与输出分享
5.1 探索更多AGC能力
有了前三个月的基础,后面三个月我开始系统性地学习AGC的其他能力。
App Linking(第4个月)
为笔记应用增加分享功能,朋友点击分享链接可以直接打开对应笔记。
第一次看到从微信点击链接,应用自动打开到指定页面,我再次被震撼了。
预加载(第5个月)
根据用户习惯预加载可能访问的笔记,列表打开速度从800ms降到200ms。
Remote Config(第6个月)
不发版本就能动态调整功能开关和UI样式,太方便了!
5.2 开始输出分享
第120天,我在公司内部做了一次技术分享:《AGC能力全景图与最佳实践》
第135天,我在CSDN发布了第一篇技术博客:《从Android到鸿蒙:AGC CloudDB实战指南》,阅读量过万。
第150天,我在华为开发者论坛回答了50+个新手问题,成为"热心开发者"。
第165天,我参加了HarmonyOS开发者日,现场分享了我的转型经验。
5.3 意外的收获
第170天,我收到了华为的邮件:邀请我成为"鸿蒙开发者专家"。
这是我始料未及的。半年前,我还是个鸿蒙小白,现在竟然成了"专家"。
更让我惊喜的是,因为掌握了鸿蒙技术,我收到了3家公司的offer,薪资比之前涨了40%。
但我选择留在原公司,因为我想继续在鸿蒙生态深耕。
六、总结:180天的蜕变
6.1 技术能力的提升
掌握的AGC能力:
- ✅ CloudDB:云数据库
- ✅ Cloud Storage:云存储
- ✅ Cloud Functions:云函数
- ✅ APMS:性能管理
- ✅ 云测试:自动化测试
- ✅ App Linking:深度链接
- ✅ 预加载:性能优化
- ✅ Remote Config:远程配置
- ✅ 应用分析:数据统计
产出成果:
- 独立开发3款鸿蒙应用
- 发表技术文章12篇
- 解答社区问题100+个
- 开源项目contributions 50+
6.2 思维方式的转变
从"搬运工"到"架构师"
以前写Android,很多时候是在"搬代码"——把别人的方案复制过来。
学习鸿蒙和AGC后,我开始思考:
- 这个功能的本质是什么?
- 有没有更优雅的解决方案?
- 如何提升用户体验?
从"单兵作战"到"站在巨人肩膀"
以前遇到问题,总想自己解决。
现在我学会了:
先看AGC有没有现成能力
站在平台的肩膀上,专注业务价值
从"被动学习"到"主动输出"
以前只是学习,不输出。
现在我养成了习惯:
- 学到新知识,写博客总结
- 遇到坑,分享给社区
- 帮助新手,巩固自己的理解
6.3 最难忘的三个瞬间
瞬间1:第一次让CloudDB数据实时同步成功(Day 11)
那种"哇!原来可以这样!"的震撼,我永远不会忘记。
瞬间2:通过APMS定位到线上崩溃根因(Day 62)
从焦虑无助到豁然开朗,那一刻我真正理解了"数据驱动"的价值。
瞬间3:收到华为"鸿蒙开发者专家"认证(Day 170)
半年前的鸿蒙小白,成长为专家,这是对我最大的肯定。
6.4 给后来者的建议
如果你也在考虑转型鸿蒙,我的建议是:
1. 放下过去,拥抱新思维
不要总想着"Android是怎么做的",鸿蒙有自己的设计哲学。
2. 从AGC开始,快速出成果
AGC降低了开发门槛,让你能快速做出可用的应用,建立信心。
3. 多实践,多踩坑
文档看100遍,不如自己写一遍代码。踩过的坑,才是真正的财富。
4. 积极输出,教学相长
写博客、答疑问、做分享,输出是最好的学习方式。
5. 保持好奇心和学习热情
鸿蒙生态在快速发展,新能力不断涌现,保持学习才能不被淘汰。
6. 加入社区,找到同伴
一个人走得快,一群人走得远。加入开发者社区,你会收获很多。
七、未完待续:下一个180天
7.1 新的目标
站在第180天的节点,我为自己定下了新目标:
技术深化:
- 深入学习鸿蒙分布式能力
- 掌握ArkTS高级特性
- 探索AI与鸿蒙的结合
能力拓展:
- 开发一款爆款应用(目标10万用户)
- 完成华为HDE(HarmonyOS Developer Expert)认证
- 参与鸿蒙开源项目贡献
社区贡献:
- 发布30篇技术文章
- 开源3个优质组件库
- 组织线下技术沙龙
7.2 对鸿蒙生态的期待
这半年,我见证了鸿蒙生态的快速成长:
- 设备激活数突破10亿
- 开发者数量激增
- 应用数量爆发式增长
我期待:
- AGC能力更加丰富
- 开发工具更加完善
- 生态协作更加紧密
- 更多开发者加入鸿蒙
7.3 给未来的自己
亲爱的未来的我:
当你再次看到这篇文章时,希望你已经:
- ✅ 成为鸿蒙领域的技术专家
- ✅ 开发出影响10万+用户的应用
- ✅ 帮助100+开发者转型鸿蒙
- ✅ 为鸿蒙生态做出实质贡献
记住,今天的你之所以能走到这里,是因为180天前的那个决定。
继续保持好奇心,继续学习,继续成长!
八、附录:我的学习资源清单
8.1 官方资源
必看文档:
- 华为开发者官网:https://developer.huawei.com
- AGC文档中心:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides
- ArkTS语法参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5
- API参考手册:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5
视频教程:
- 华为开发者学院:https://developer.huawei.com/consumer/cn/training
- HarmonyOS官方视频号
- Bilibili上的官方教程
8.2 社区资源
开发者社区:
- 华为开发者论坛:https://developer.huawei.com/consumer/cn/forum
- CSDN鸿蒙专区
- 掘金鸿蒙话题
- 51CTO鸿蒙专栏
开源项目:
- OpenHarmony三方库:https://ohpm.openharmony.cn
- GitHub上的鸿蒙项目
- Gitee上的优质示例
8.3 学习路径推荐
第1-30天:基础入门
- 搭建开发环境
- 学习ArkTS语法
- 掌握ArkUI组件
- 完成Hello World
- 开发简单应用(计算器、记事本等)
第31-60天:进阶实践
- 学习状态管理
- 掌握数据持久化
- 接入AGC基础能力(CloudDB、Cloud Storage)
- 完成中等复杂度应用
第61-90天:深入学习
- 性能优化技巧
- 接入APMS和云测试
- 学习分布式能力
- 参与实际项目
第91-180天:专家之路
- 掌握AGC高级能力
- 输出技术文章
- 参与社区贡献
- 成为团队技术专家
8.4 常用工具
开发工具:
- DevEco Studio(必备)
- HarmonyOS SDK
- Remote Emulator(云端模拟器)
调试工具:
- DevEco Testing(自动化测试)
- HiTrace(性能分析)
- HiLog(日志查看)
辅助工具:
- AGC控制台(云服务管理)
- AppGallery Connect CLI(命令行工具)
- Previewer(实时预览)
8.5 我的笔记模板
我养成了做笔记的习惯,这是我的笔记模板:
# [知识点名称]
## 1. 概念理解
- 是什么?
- 为什么需要?
- 解决什么问题?
## 2. 核心用法
`typescript
// 代码示例
`
## 3. 常见问题
* 问题1:描述 + 解决方案
* 问题2:描述 + 解决方案
## 4. 最佳实践
* 建议1
* 建议2
## 5. 参考资料
* 链接1
* 链接2
## 6. 个人总结
* 学到了什么
* 还有什么疑问
九、写在最后:感谢这段旅程
9.1 感谢
感谢华为AGC团队:提供了如此强大的开发平台,让前端开发者也能轻松实现全栈能力。
感谢鸿蒙社区:热心的开发者们无私分享经验,让我少走了很多弯路。
感谢我的团队:给了我试错的空间和成长的机会。
感谢我自己:在迷茫时没有放弃,在困难时选择坚持。
9.2 写给正在转型的你
如果你正在读这篇文章,说明你也在考虑或已经开始鸿蒙开发之路。
我想告诉你:
这条路并不容易,你会遇到:
- 新概念带来的困惑
- 踩不完的坑
- 偶尔的挫折感
- 对未来的不确定
但这条路值得走,因为:
- 鸿蒙生态在快速发展
- AGC让开发变得更简单
- 掌握新技术提升竞争力
- 成长的过程本身就是收获
记住:
- 每个专家都曾是新手
- 每个复杂的应用都始于Hello World
- 每次踩坑都是在积累经验
- 每篇博客都是在巩固知识
相信自己,你也可以!
9.3 最后的最后
180天,从Android开发者到鸿蒙开发专家。
这不是终点,而是新的起点。
鸿蒙的世界很大,AGC的能力很强,可以探索的方向很多。
我会继续在这条路上走下去,也期待在社区、在论坛、在技术大会上,遇见同样热爱技术、拥抱变化的你。
让我们一起,为鸿蒙生态添砖加瓦! ✨
作者:一个从Android转型到鸿蒙的开发者
时间:2024年9月15日(转型第180天)
初心:用技术改变世界,用代码创造价值
未来:继续在鸿蒙生态深耕,成为更好的自己
附:180天成长数据统计
学习投入
- 总学习时长:520小时
- 阅读文档:300+篇
- 观看视频:80+小时
- 动手实践:150+小时
技能成长
- 掌握AGC能力:9项
- 开发完整应用:3款
- 代码提交:800+次
- 解决问题:150+个
社区贡献
- 发表文章:12篇
- 总阅读量:5万+
- 回答问题:100+个
- 获得点赞:800+
职业发展
- 薪资涨幅:40%
- 收到offer:3个
- 获得认证:鸿蒙开发者专家
- 演讲分享:5次
应用数据
- 累计用户:2.3万
- 应用评分:4.6分
- 日活用户:3200+
- 用户好评:95%
声明:本文为本人在项目实践中的真实经验总结,欢迎交流讨论,共同完善。

浙公网安备 33010602011771号