0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony SystemUI开发记录

OpenHarmony技术社区 来源: OpenHarmony技术社区 作者: OpenHarmony技术社区 2023-04-25 14:53 次阅读

最近学习 OpenHarmony 应用开发, SDK 版本是 3.2.9.2 Beta4,IDE 版本是 3.1.0.200。

参考官方文档,做了个 Demo 应用,调试、运行非常顺利。启动应用后,状态栏和导航栏占用的高度过高,显得很奇怪,尝试修改一下系统应用。

摸石头过河

因为没做过移动端开发,最初以为状态栏和导航栏是由 Launcher 控制的。

https://gitee.com/openharmony/applications_app_samples/tree/master/ability/Launcher

从示例中找了个 launcher,按照文档进行编译,放在设备上怎么也起不来,Google 查了半天,最后发现该版本中文档描述不全,参考最新版本文档进行编译,运行成功。

有了经验之后,使用系统 Launcher 进行编译,报了一堆错误。

https://gitee.com/openharmony/applications_launcher

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

看了系统 Launcher 代码,感觉状态栏和导航栏并不是由 Launcher 控制的,又下载了系统 SystemUI 代码,编译时也有几个报错,不知道怎么解决。

后来发现下载的代码不对,应该从分支中选择版本,从标签中选择的版本代码可能不全或者有问题。

编译安装踩坑

替换系统应用方法:

//获取系统目录读写权限
hdcshell"mount-oremount,rw/"
//拷贝应用到SystemUI目录
hdcfilesendphone_statusbar-phone_entry-default-signed.hap/system/app/com.ohos.systemui/SystemUI-StatusBar.hap
//应用放在/data目录下,删除/data目录下的所有文件,系统会重新安装系统应用。
hdcshell"rm-rf/data/*"
//重启设备
hdcshellreboot

①系统应用签名

环境: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":"OpenHarmonyApplicationRelease",
"keyPassword":"00000016FD3897FD4C46940ED39FFC652872B7B18BEDCCA07400A6EBEE307C9C41B96DB6B64D",
"profile":"signature/systemui.p7b",
"signAlg":"SHA256withECDSA",
"storeFile":"signature/OpenHarmony.p12"
}
}]

②SystemUI 编译报错(SDK 问题)

环境:SDK:Beta4,代码:Beta4

现象:编译报错

信息如下:

>hvigorERROR:Faileddefault@CompileArkTS...
>hvigorERROR:Toolsexecutionfailed.
ArkTS:ERRORFile:/xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
Cannotfindmodule'@ohos.batteryinfo'oritscorrespondingtypedeclarations.
Modulenotfound:Error:Can'tresolve'bundle/extensionAbilityInfo'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource'
Modulenotfound:Error:Can'tresolve'bundle/extensionAbilityInfo'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'
Modulenotfound:Error:Can'tresolve'bundle/metadata'in'/xxx/applications_systemui-OpenHarmony-3.2-Beta4/common/src/main/ets/plugindatasource/common'

排查:查看 API 发现 bundle 目录下没有 extensionAbilityInfo 和 metadata 文件,而 bundleManager 中有这两个文件。

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

环境:SDK:Beta2,代码:Beta4

现象:编译报错

信息如下:

>hvigorERROR:Faileddefault@CompileArkTS...
>hvigorERROR:Toolsexecutionfailed.
ETS:ERRORFile:/xxx/applications_systemui-OpenHarmony-3.2-Beta4/features/batterycomponent/src/main/ets/default/batteryModel.ts:16:25
Cannotfindmodule'@ohos.batteryInfo'oritscorrespondingtypedeclarations.
排查:api 中 info 的 i 为小写,而文件中导入包的时候是大写 I。 ede19c00-e307-11ed-ab56-dac502259ad0.png

解决方案:将 batteryModel.ts 文件中大写I改为小写 i,即可编译成功。

如下:

importBatteryInfofrom"@ohos.batteryinfo";

③SystemUI 应用安装失败

环境:SDK:Beta4,代码:Beta4

现象:替换状态栏应用后,状态栏消失

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

手动安装应用
bminstall-p/system/app/com.ohos.systemui/SystemUI-Status.hap-u0
//报错信息
error:failedtoinstallbundle.
error:installreleaseTypenotsame

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

查看一下设备中 SystemUI 的 SDK 版本:

hdcshellcat/data/app/el1/bundle/public/com.ohos.systemui/phone_statusbar/module.json

edf76a80-e307-11ed-ab56-dac502259ad0.png

解决方案:系统中使用的是 SDK Beta2,而我编译使用的是 SDK Beta4,所以需要将 SDK 切换到 Beta2 版本。

Beta2 编译 Beta4 版本代码也会有问题,参考:SystemUI 编译报错(SDK 问题))。

④安装导航栏后状态栏消失

环境:SDK:Beta4,代码:Beta2

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

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

ee1ba1b6-e307-11ed-ab56-dac502259ad0.png

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 社区能够建立起来,为开发者答疑解惑。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32397
  • 开发者
    +关注

    关注

    1

    文章

    499

    浏览量

    16391
  • OpenHarmony
    +关注

    关注

    23

    文章

    3307

    浏览量

    15159

原文标题:OpenHarmony SystemUI开发记录

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    玩嗨OpenHarmony:基于OpenHarmony的仿生四足狗开发分享

    原文引自51CTO 开源基础软件社区 《刘潇翔:基于OpenHarmony的仿生四足狗开发分享》 作者介绍 刘潇翔, 现就读于南方科技大学(Southern University
    的头像 发表于 10-31 21:50 3156次阅读

    OpenHarmony应用开发安装数学库

    OpenHarmony应用开发安装数学库
    的头像 发表于 12-01 14:15 946次阅读
    <b class='flag-5'>OpenHarmony</b>应用<b class='flag-5'>开发</b>安装数学库

    HarmonyOS与OpenHarmony应用开发差异

    DevEco Studio是HarmonyOS的配套的开发IDE,因为HarmonyOS是基于OpenHarmony开发的,因此,使用DevEco Studio(配套HarmonyOS)也可以进行
    发表于 10-22 10:35

    OpenHarmony设备开发入门【1】初始OpenHarmony

    操作系统的框架和平台,促进万物互联产业的繁荣发展。官方gitee仓库:https://gitee.com/openharmony技术架构如下:关于系统的特性,这里不再过多赘述,开发者可以直接在 官方
    发表于 01-20 09:08

    请教大神SystemUI加载过程是如何去完成的

    请教大神SystemUI加载过程是如何去完成的?
    发表于 03-03 07:39

    使用900版本ide编译systemui,状态栏和控制中心无法显示怎么处理?

    碰巧到开发板,上下不显示、时间和显示栏可以正常显示到屏幕控制中心滑动不出来,中间环境如下开发板:dayu200openharmony系统版本:3.2-beta1systemui代码版本
    发表于 05-26 15:33

    OpenHarmony3.1 Release for Rk3568 如何修改系统应用,如SystemUI-NavigationBar &Settings

    需要定制一下状态栏,添加一个按钮。发现修改applications中的systemui 未生效,查看之后发现编译到out目录的是applications/standard/hap 中已经编译好的hap文件。所以我该如何修改呢。
    发表于 08-17 17:09

    openharmony开发企业有哪些

    将会在各种智能终端上运用。那么openharmony开发企业有哪些?下面小编就为大家带来openharmony开发企业有哪些的答案。 openhar
    的头像 发表于 06-23 11:13 1854次阅读

    openharmony开发openharmony开发

    现在市面上支持OpenHarmony开发板已经非常多了,OpenHarmony不仅仅只能在海思系列芯片上运行,比较常见的有HiSpark、小熊派系列。这些开发板都是基于海思的Hi38
    的头像 发表于 06-24 09:03 3294次阅读

    OpenHarmony2.03516编译烧录开机成功

    ,具备的主要功能如下: 新增 22 个子系统,支持全面的 OS 能力,支持内存大于 128M 的带屏设备开发等。 提供系统三大应用:桌面、设置和 SystemUI。 提供全新的 OpenHarmony
    的头像 发表于 06-25 17:22 2258次阅读
    <b class='flag-5'>OpenHarmony</b>2.03516编译烧录开机成功

    OpenHarmony轻量系统开发【1】初始OH

    的。 后续将给大家陆续分享轻量系统开发相关内容 目录: OpenHarmony轻量系统开发【1】初始OpenHarmony OpenHarmony
    发表于 02-25 17:49 805次阅读

    openharmony开源社区 OpenHarmony开发样例上新了

    openharmony开源社区 OpenHarmony开发样例上新了 OpenHarmony 开源项目是由开放原子开源基金会孵化及运营的开源项目,由开放原子开源基金会
    的头像 发表于 04-25 16:37 2118次阅读

    OpenHarmony开发体系内容介绍

    初学OpenHarmony开发者最需要构建对OpenHarmony开发体系的整体了解。
    的头像 发表于 07-04 10:34 1198次阅读

    OpenHarmony轻量系统书籍推荐《OpenHarmony轻量设备开发理论与实战》

    最近大家问的智能家居套件方面有没有可以参考的资料,这里给大家统一回复一下 推荐大家可以看这本书 《OpenHarmony轻量设备开发理论与实战》 本书系统地讲授OpenHarmony 轻量系统 设备
    的头像 发表于 07-20 12:43 668次阅读

    openharmony开发应用

    随着智能设备的普及和多样化,开发者们对于更加灵活、高效的操作系统需求与日俱增。在这个背景下,华为推出了OpenHarmony,一个全场景智能终端操作系统和生态平台。本文将详细探讨
    的头像 发表于 12-19 09:42 282次阅读