【OpenHarmony】从入门到肝疼

初衷

总结自己在接触和开发OpenHarmony过程中,遇到的种种场景和问题,避免自己重复踩坑。在巩固自己知识的同时,加强对输出文档的撰写能力。也希望能帮助更多小伙伴了解到OpenHarmony,了解开源。

官方指导文档

OpenHarmony官网入口
OpenHarmony官网开发文档
HarmonyOS开发者官网应用开发文档–程序框架
码云社区OpenHarmony开发者文档
拉瓦尔社区-讨论OpenHarmony技术相关的问题
电子发烧友-HarmonyOS技术社区

名词解释

名词说明
L0轻量系统(mini)
L1小型系统(small)
L2标准系统(standard)

环境搭建

轻量系统 Hi3861
小型系统 Hi3516
标准系统 Rk3568

Q&A

L1新增SA

官方提供的SA编写样例,是在“开发服务”那里完成API的实现。一般简单的功能,在“开发服务”实现API是能满足要求的。假如要实现的API属于一个服务下的多个功能模块,就需要使用到"子功能"了。

“开发服务的子功能”,在文档里,叫做Feature,一般通过SYSEX_FEATURE_INIT或SYS_FEATURE_INIT(还有其他方式,他们的区别就不过多描述)去完成Feature的初始化。需要在Feature注册API的时候,往往“开发服务”不进行API注册的动作,这时需要把“开发服务”中RegisterDefaultFeatureApi()去掉,以及创建服务对象时SERVER_IPROXY_IMPL_BEGIN到IPROXY_END的成员去掉,而Feature则需要把这些加上。

Q:文档中没有变量DefaultFeatureApi的描述。
A:DefaultFeatureApi是结构体类型名,由自己进行类型定义。一般采用默认的定义方式。

typedef struct {
    INHERIT_SERVER_IPROXY;
} DefaultFeatureApi;

Q:文档上Feature创建接口对象时,使用了DEFAULT_IUNKNOWN_ENTRY_BEGIN和DEFAULT_IUNKNOWN_ENTRY_END把需要实现API接口包起来了,和“开发服务”的不一样。
A:需要实现API接口的接口对象,要把这两个宏去掉,替换成SERVER_IPROXY_IMPL_BEGIN和IPROXY_END,避免出现隐藏问题。

Q【OpenHarmony】L1 新增SA这里的操作,为什么要多一个service的bin文件,而且还用到了sleep()。
A:开发常驻进程服务时,需要这么操作,如果是其他方式拉起的进程,可以自行尝试下,使用SYSEX_FEATURE_INIT()和SYSEX_SERVICE_INIT()。常驻服务,是由init拉起,进程起来后如果立即去SAMGR_Bootstrap(),Feature的注册会被忽略掉。经过测试,sleep2秒,是稳定的。

Q:改完SA的代码,L1设备烧完镜像后,屏幕不亮,镜像没有真正跑起来。
A:一步步还原代码,往往是配置的过程出了问题。

bundle.json编译问题

Q:bundle.json的 “inner_kits” 中明明有定义 “header_files” 里面的头文件,但是其他部件的BUILD.gn在加入对应的external_deps后,引用头文件提示找不到该头文件。
A:查看编译日志,发现编译选项-I 里没有该头文件的路径。
确认bundle.json中"inner_kits"里面"header_base"和"header_files"是否正确;再确认bundle.json中"inner_kits"里面"name"所在的BUILD.gn,有没有public_configs配置,没有的话要补上,例如

config("headers_config") {
  visibility = [ ":*" ]
  include_dirs = [ "include" ]
}

ohos_shared_library("libfoo") {
... ...
    public_configs = [ ":headers_config" ]
... ...
}

相关链接

【OpenHarmony】L0L1 添加子系统/组件
【OpenHarmony】L1 新增SA
【OpenHarmony】L1 烧录的启动参数
【OpenHarmony】关于L1 Hi3516连接网络的相关说明
【OpenHarmony】标准系统 新增子系统/部件

下期预告:L2新增SA,L2的SA发布通知
后续日常更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值