OpenHarmony SystemUI开发记录 天天快看

时间:2023-04-20 20:10:17 来源: 博客园
背景介绍

最近学习OpenHarmony应用开发, SDK版本是3.2.9.2 Beta4,IDE版本是3.1.0.200。参考官方文档,做了个Demo应用,调试、运行非常顺利。启动应用后,状态栏和导航栏占用的高度过高,显得很奇怪,尝试修改一下系统应用。

摸石头过河

因为没做过移动端开发,最初以为状态栏和导航栏是由Launcher控制的,从示例中找了个launcher,按照文档进行编译,放在设备上怎么也起不来,Google查了半天,最后发现该版本中文档描述不全,参考最新版本文档进行编译,运行成功。

有了经验之后,使用系统Launcher进行编译,报了一堆错误,哪里报错改哪里,修改完之后编译成功,因为是系统应用,不能使用自动签名。根据官方提供的签名方式进行签名,放到设备中无法显示应用中心和Dock。


(资料图片仅供参考)

看了系统Launcher代码,感觉状态栏和导航栏并不是由Launcher控制的,又下载了系统SystemUI代码,编译时也有几个报错,不知道怎么解决,后来发现下载的代码不对,应该从分支中选择版本,从标签中选择的版本代码可能不全或者有问题。

编译安装

替换系统应用方法:

// 获取系统目录读写权限hdc shell "mount -o remount,rw /"// 拷贝应用到SystemUI目录hdc file send phone_statusbar-phone_entry-default-signed.hap /system/app/com.ohos.systemui/SystemUI-StatusBar.hap// 应用放在/data目录下,删除/data目录下的所有文件,系统会重新安装系统应用。hdc shell "rm -rf /data/*"// 重启设备hdc shell reboot
1.系统应用签名

环境

SDK:Beta4,代码:Beta4

现象

系统应用无法使用自动签名。

解决方案

参考链接:系统应用签名,我使用的是标准签名。

下载material文件夹、OpenHarmony.p12文件、OpenHarmonyApplication.pem文件,放在signature目录下,修改项目中的build-profile.json5文件,添加以下信息,重新编译即可。

"products": [      {        "name": "default",        "signingConfig": "default"      }    ],    "signingConfigs": [{      "name": "default",      "material": {        "storePassword": "00000016D9DCF063F0FC4BBD0E7FE1E3B06A67C07BECE1BDD4E2A3EFDAE20F890810EC02AA2A",        "certpath": "signature/OpenHarmonyApplication.pem",        "keyAlias": "OpenHarmony Application Release",        "keyPassword": "00000016FD3897FD4C46940ED39FFC652872B7B18BEDCCA07400A6EBEE307C9C41B96DB6B64D",        "profile": "signature/systemui.p7b",        "signAlg": "SHA256withECDSA",        "storeFile": "signature/OpenHarmony.p12"      }    }]
2.SystemUI编译报错(SDK问题)

环境

SDK:Beta4,代码:Beta4

现象

编译报错,信息如下:

> hvigor ERROR: Failed :phone_statusbar:default@CompileArkTS... > hvigor ERROR: Tools execution failed. ArkTS:ERROR File: /xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25 Cannot find module "@ohos.batteryinfo" or its corresponding type declarations. Module not found: Error: Can"t resolve "bundle/extensionAbilityInfo" in "/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource" Module not found: Error: Can"t resolve "bundle/extensionAbilityInfo" in "/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common" Module not found: Error: Can"t resolve "bundle/metadata" in "/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common"

排查

查看API发现bundle目录下没有extensionAbilityInfometadata文件,而bundleManager中有这两个文件。

解决方案

在报错的地方将bundle/extensionAbilityInfo改为bundleManager/extensionAbilityInfobundle/metadata改为bundleManager/metadata,编译通过。

环境

SDK:Beta2,代码:Beta4

现象

编译报错,信息如下:

> hvigor ERROR: Failed :pc_statusbar:default@CompileArkTS... > hvigor ERROR: Tools execution failed. ETS:ERROR File: /xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25 Cannot find module "@ohos.batteryInfo" or its corresponding type declarations.

排查

api中info的i为小写,而文件中导入包的时候是大写I

解决方案

batteryModel.ts文件中大写I改为小写i,即可编译成功,如下:

import BatteryInfo from "@ohos.batteryinfo";
3.SystemUI应用安装失败

环境

SDK:Beta4,代码:Beta4

现象

替换状态栏应用后,状态栏消失

排查

使用bm命令手动安装应用报错:

手动安装应用bm install -p /system/app/com.ohos.systemui/SystemUI-Status.hap -u 0// 报错信息error: failed to install bundle.error: install releaseType not same

报错信息意思是设备中SystemUI中SDK版本与我自己编译的SystemUI SDK版本不一致,查看一下设备中SystemUI的SDK版本:

hdc shell cat /data/app/el1/bundle/public/com.ohos.systemui/phone_statusbar/module.json

解决方案:

系统中使用的是SDK Beta2,而我编译使用的是SDK Beta4,所以需要将SDK切换到Beta2版本(Beta2编译Beta4版本代码也会有问题,参考:SystemUI编译报错(SDK问题))。

4.安装导航栏后状态栏消失

环境

SDK:Beta4,代码:Beta2

现象

单独安装状态栏正常,安装导航栏后状态栏消失

排查

查看状态栏日志,发现有很多日志没有打出来,追踪了一下,定位到features/statusbarcomponent/src/main/ets/com/ohos/common/StatusBarConfiguration.ts文件中,发现卡在这里

status_bar_size_landscape搜索一下这个字段,发现base/element/string.json文件中存在该字段,zh_CN/element/string.json文件中不存在该字段。(zh_CN/element/string.json添加字段后状态栏正常显示,是什么原因不清楚)

解决方案

product/phone/statusbar/src/main/resources/zh_CN/element/string.json文件中添加以下内容:

{      "name": "status_bar_size_portrait",      "value": "16"    },    {      "name": "status_bar_size_landscape",      "value": "16"    },    {      "name": "phone_status_bar_size_portrait",      "value": "16"    },    {      "name": "phone_status_bar_size_landscape",      "value": "16"    },
定制化开发

经过摸索,状态栏和导航栏布局在窗口管理中控制,可以修改模块下的ServiceExtAbility.ts文件来自定义实现,也可以修改配置文件resources/zh_CN/element/string.json中的以下字段,来控制状态栏和导航栏的高度(这里高度不能加单位,按照官网文档的说法默认使用的VP单位)。

{      "name": "nav_bar_size_portrait",      "value": "26"    },    {      "name": "nav_bar_size_landscape",      "value": "26"    },    {      "name": "status_bar_size_portrait",      "value": "16"    },    {      "name": "status_bar_size_landscape",      "value": "16"    },
总结

做普通应用Demo上手容易,ArkTS做页面布局方便,使用组件点点点即可得到想要的样式。因为使用的是Beta版本,修改SystemUI过程中遇到很多坑,比如编译报错,应用安装失败,应用消失等问题,在Google上基本搜不出来解决方案,只能在官方文档、51CTO社区、华为开发者联盟上搜索、提问来解决。像是安装导航栏后状态栏消失问题,解决起来很容易,但是寻找解决方法要花很长时间,这也是写这篇文章的原因,希望可以帮助开发者解决问题,同时也希望OpenHarmony社区能够建立起来,为开发者答疑解惑。最后,感谢Haoc_小源同学的帮助,感谢TiZizzz的OpenHarmony应用签名 - 系统应用签名文章。

标签:

精彩推送

每日快报!2023中国摩托车越野锦标赛(库伦站)正式启动

人民网北京4月17日电(记者李乃妍)近日,2023年中国摩托车越野锦标赛(库伦站)新闻发布会在北京国家会...

来源:2023.04.18

哈登打趣:比赛中有一回合没执行教练战术 然后他叫暂停骂我们

直播吧4月18日讯今日NBA季后赛,76人在主场以96-84击败篮网,系列赛2-0领先。赛后,哈登接受了记者采访。本场

来源:2023.04.18

【世界速看料】右舵MG你见过吗?名爵两款新车亮相上海车展!

在2023年上海车展正式开幕前夕,我们率先给大家体验了1 5T版本的MG7,以及MG面向欧洲市场出口的MG4车型...

来源:2023.04.18

被控受贿937万余元,中储粮安徽分公司原副总经理胡群受审|全球视讯

4月18日上午,合肥市中级人民法院一审公开开庭审理了中国储备粮管理集团有限公司安徽分公司原党委常委、...

来源:2023.04.18

天天最新:构成物质的最小单位是什么(夸克构成物质的最小单位)

夸克。构成物质的最小单位是夸克,分子有些是由原子组成,有些是单一的,原子里还有原子核,夸克却属于...

来源:2023.04.18

每日关注!浙江杭州女童电梯坠亡案开庭审理 涉案保姆认罪悔罪

今天(4月18日)上午,浙江杭州市拱墅区人民法院一审公开开庭审理被告人吴秀芳过失致人死亡一案。杭州市拱...

来源:2023.04.18

金蝉脱壳的达飞云贷

金蝉脱壳的达飞云贷,达飞云贷

来源:2023.04.18

世界资讯:五大封测龙头重磅亮相五月深圳半导体展,600+精选展商已就位

SEMI-e深圳国际半导体展将于2023年5月16日-18日在深圳国际会展中心(宝安新馆)盛大开幕!本届展会以“芯机会•

来源:2023.04.18

天天新消息丨科学家发现约8亿年前“串珠”生物

该所早期生命研究团队牵头多名国内外古生物学者,近期在我国山东、安徽发现一种约8亿年前的原始生物化石...

来源:2023.04.18

新闻快讯

X 关闭

X 关闭

新闻快讯