qidao123.com技术社区-IT企服评测·应用市场
标题:
【 OpenHarmony 系统应用源码解析 】-- Launcher 初体验
[打印本页]
作者:
东湖之滨
时间:
2024-8-31 19:06
标题:
【 OpenHarmony 系统应用源码解析 】-- Launcher 初体验
前言
近来因为业务需要,需要做一款 UI 定制的鸿蒙 Launcher,于是就开始了「找到代码」、「研究代码」、「魔改代码」的套路流程,仅以此文章作为知识备份和技能探究所用,也希望能给其他小伙伴提供一些源码的解析思绪,方法大家各自魔改!
一、官方简介
Gitee codes:
应用子系统/Launcher
Launcher 作为系统人机交互的主要入口,提供应用图标的表现、点击启动、卸载应用,并提供桌面布局设置以及近来使命管理等功能。
Launcher 接纳扩展的 TS 语言(ArkTS)开辟
1.1 主要结构
1.2 分层说明
Module层级说明product业务形态层区分差异产品、差异屏幕的各形态桌面,含有桌面窗口、个性化业务,组件的设置,以及个性化资源包。feature公共特性层抽象的公共特性组件集合,可以被各桌面形态引用。common公共本领层基础本领集,每个桌面形态都必须依靠的模块。
1.3 目录结构
/applications/standard/launcher/
├── common # 公共能力层目录
├── docs # 开发指南
├── feature # 公共特性层目录
│ └── appcenter # 应用中心
│ └── bigfolder # 智能文件夹
│ ├── form # 桌面卡片管理功能
│ ├── gesturenavigation # 手势导航
│ ├── pagedesktop # 工作区
│ ├── recents # 最近任务
│ ├── settings # 桌面设置
│ ├── smartdock # dock工具栏
├── product # 业务形态层目录
├── signature # 签名证书
复制代码
1.4 开辟调试
IDE 下载:建议大家直接下载
OpenHarmony 4.1 Release DevEco-Studio
吧,API 支持
8 ~ 11
。
1.5 SDK
Launcher 应用的编译需使用相对应版本的
ohos-sdk-full \ mac-sdk-full
来举行开辟调试。
IDE 上是 Public SDK,故 full sdk 需要重新下载,下载地址:
新版本界面:http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist
老版本界面:http://ci.openharmony.cn/dailys/dailybuilds
具体下载及如何替换这边就不啰嗦了,大家直接看 Gitee 介绍自行替换。
1.6 签名设置
关于签名设置,也不啰嗦了,下载的代码自带的文件都已经设置好,无需自己手动签名。
1.7 替换 Launcher
使用以下下令来更新编译出来的 Launcher 部件 hap 包:
ren phone_launcher-default-signed.hap Launcher.hap
ren launcher_settings-phone_launcher-default-signed.hap Launcher_Settings.hap
hdc target mount
hdc shell rm -rf /data/misc_de/0/mdds/0/default/bundle_manager_service
hdc shell rm -rf /data/accounts
hdc shell mount -o remount,rw /
hdc file send .\Launcher.hap /system/app/com.ohos.launcher/Launcher.hap
hdc file send .\Launcher_Settings.hap /system/app/com.ohos.launcher/Launcher_Settings.hap
pause
hdc shell mount -o remount,rw /
hdc shell rm /data/ -rf
hdc shell sync /system/bin/udevadm trigger
hdc shell reboot
复制代码
二、编译运行
2.1 分支选择
拉完官方示例代码后,可以看到很多分支,我选了 OpenHarmony-4.1-Release 作为魔改的基础分支,当然你也可以根据需要选择别的分支(我是着实看不懂,搞这么多分支干什么,而且基本上彼此分支的 UI 结果大差不差,险些所有 Openharmony 自带的系统应用 Demo UI 及功能逻辑都很 low,所以凡事靠自己,自己魔改吧!)
2.2 打开工程 / 编译 hap
切到对应分支后,即可打开工程,等待同步完成,如下图即可。
接下来可以编译 hap 包:
接着找到需要的 hap 包,重命名,替换后重启:
默认 Launcher 结果:(我手里有一台平板,所以就以平板为示例,结果要比手机少一点)
三、Launcher 首页
3.1 MainAbility
export default class MainAbility extends ServiceExtension {
onCreate(want: Want): void {
Log.showInfo(TAG,'onCreate start');
this.context.area = 0;
this.initLauncher();
}
async initLauncher(): Promise<void> {
/**
* 1. init Launcher context
* 初始化上下文
*/
globalThis.desktopContext = this.context;
/**
* 2. init global const
* 初始化全局变量
*/
this.initGlobalConst();
/**
* 3. init Gesture navigation
* 初始化手势导航
*/
this.startGestureNavigation();
/**
* 4. init rdb
* 初始化 rdb
*/
let dbStore = RdbStoreManager.getInstance();
await dbStore.initRdbConfig();
await dbStore.createTable();
let registerWinEvent = (win: window.Window) => {
win.on('windowEvent', (stageEventType) => {
// 桌面获焦或失焦时,通知桌面的卡片变为可见状态
if (stageEventType === window.WindowEventType.WINDOW_ACTIVE) {
localEventManager.sendLocalEventSticky(EventConstants.EVENT_REQUEST_FORM_ITEM_VISIBLE, null);
Log.showInfo(TAG, `lifeCycleEvent change: ${stageEventType}`);
}
})
};
/**
* 5. 注册窗口事件
*/
windowManager.registerWindowEvent();
/**
* 6. 注册导航栏事件
*/
navigationBarCommonEventManager.registerNavigationBarEvent();
/**
* 7. create Launcher entry view
* 创建桌面窗口
* WindowManager.ts --> DESKTOP_WINDOW_NAME = 'EntryView';
* 加载 pages/EntryView
*/
windowManager.createWindow(globalThis.desktopContext, windowManager.DESKTOP_WINDOW_NAME,
windowManager.DESKTOP_RANK, 'pages/' + windowManager.DESKTOP_WINDOW_NAME, true, registerWinEvent);
/**
* 8. load recent,加载 Recent 窗口
*/
windowManager.createRecentWindow();
this.registerInputConsumer();
}
...
}
复制代码
MainAbility 创建了桌面窗口:
pages/EntryView
。
3.2 EntryView
[code]
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4