改造现有应用替换原生Launcher
·
原生Launcher功能有限,许多定制化的需求无法满足。现提供一种修改现有应用,替换原生Launcher的方式。
1.修改签名
Launcher作为系统应用需要将APL等级修改为system_core。此处提供一种最方便调试的方式去修改。修改对应SDK文件下的toolchains\lib\UnsgnedReleasedProfileTemplate.json。修改如下所示,该方法能最快修改等级,但会改变签名指纹。

2.修改应用配置
修改module.json5
"extensionAbilities": [
{
"priority": 2,//应用启动优先级
"skills": [
{
"entities": [
"entity.system.home",
"flag.home.intent.from.system"
],
"actions": [
"action.system.home",
"com.ohos.action.main",
"action.form.publish"
]
}
],
"visible": true,
"name": "com.ohos.launcher.MainAbility",//对应应用的打开界面的Ability
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "$string:entry_MainAbility",
"srcEntrance": "./ets/MainAbility/MainAbility.ts",
"type": "service"//必须为service类型,该类型配置也需要APL为system级别
}
]
修改Ability加载方式
通过创建窗口,使用窗口去加载对应的页面,核心的windowManager可以在开源Launcher的common/src/main/ets/default/manager/WindowManager.ts中获取
export default class MainAbility extends ServiceExtension {
async onCreate(want: Want): Promise<void> {
Log.showInfo(TAG, 'onCreate start');
this.initLauncher();
}
async initLauncher(): Promise<void> {
// init Launcher context
globalThis.desktopContext = this.context;
globalThis.screenWidth = (await this.getWindowDisplayData()).width
globalThis.screenHeight = (await this.getWindowDisplayData()).height
Log.showInfo(TAG, 'screenWidth: ' + globalThis.screenWidth + ' screenHeight: ' + globalThis.screenHeight);
windowManager.registerWindowEvent();
// create Launcher entry view
windowManager.createWindow(globalThis.desktopContext, windowManager.DESKTOP_WINDOW_NAME,
windowManager.DESKTOP_RANK, 'pages/' + windowManager.DESKTOP_WINDOW_NAME, true);
}
onDestroy(): void {
windowManager.unregisterWindowEvent();
windowManager.destroyWindow(windowManager.DESKTOP_WINDOW_NAME);
windowManager.destroyRecentWindow();
Log.showInfo(TAG, 'onDestroy success');
}
onRequest(want: Want, startId: number): void {
Log.showInfo(TAG, `onRequest, want:${want.abilityName}`);
windowManager.minimizeAllApps();
}
private async getWindowDisplayData() {
let displayData: display.Display = null;
await display.getDefaultDisplay()
.then((res) => {
displayData = res;
}).catch((err) => {
});
return displayData;
}
}
3.修改完成之后删除原生Laucnher,替换为改造后的信息。文件在vendor仓中的preinstall-config目录下,将install_list_capability.json,install_list_permissions.json,install_list.json原生Launcher的信息替换为改造后的信息。该文件在本机的/system/etc/app中,也可以修改对应的文件后推送进去,替换hap直接本地验证

4.如果需要配置Launcher保活的话,需要在foundation/ability/ability_runtime/services/abilitymgr/include/ability_config.h文件中launcher对应的名称改掉
更多推荐
所有评论(0)