OpenHarmony SA 动态库服务拉起的main入口

想了解更多内容,动的请访问:

和华为官方合作共建的态库鸿蒙技术社区

https://harmonyos.51cto.com

简介

OpenHarmony 很多服务都是编译成动态库, 动态库服务,没有main函数入口。服务服务的拉起拉起的入口在哪?

以在线升级服务为例说明服务入口,说明如下:

一. 服务的动的动态库:libupdateservice.z.so

这个编译代码里面有,云南idc服务商学习者可以在源代码中去看:

配置路径:base\update\updateservice\engine\BUILD.gn

二. main入口:sa_main

sa_main是态库含有main入口的独立可执行文件。学习者可以自己在代码中去看:

配置路径:foundation\distributedschedule\safwk\services\safwk\BUILD.gn

三. sa_main如何加载 libupdateservice.z.so

updater_sa.xml配置了动态库libupdateservice.z.so的服务各项信息。

sa_main通过读取解析updater_sa.xml,拉起 把动态库libupdateservice.z.so加载到自身进程中来。

即运行命令:/system/bin/sa_main /system/profile/updater_sa.xml

1. 动态库服务的动的编译配置

1.1 动态库的编译配置

动态库编译配置: 

base\update\updateservice\engine\BUILD.gn 

动态库编译后的名称: 

libupdateservice.z.so 

1.2 xml的服务器租用编译配置

1.2.1 xml的原始文件

原始xml的文件路径:base\update\updateservice\engine\sa_profile\3006.xml

内容:

<info>     <process>updater_sa</process>     <systemability>         <name>3006</name>         <libpath>libupdateservice.z.so</libpath>         <run-on-create>true</run-on-create>         <distributed>false</distributed>         <dump-level>1</dump-level>     </systemability> </info> 

1.2.1.1 3006:

是UPDATE_DISTRIBUTED_SERVICE_ID的值,该值定义在

utils\system\safwk\native\include\system_ability_definition.h中。态库

1.2.1.2 libupdateservice.z.so:

是服务服务对应的动态库

1.2.2 xml的编译配置BUILD.gn

编译文件配置路径:base\update\updateservice\engine\sa_profile\BUILD.gn

内容: 

import("//build/ohos/sa_profile/sa_profile.gni") ohos_sa_profile("updater_sa_profile") {    sources = [ "3006.xml" ]   part_name = "updater" } 

1.2.3 编译配置ohos.build

文件路径:base\update\updater\ohos.build

内容如下:

1.2.4 编译成功生产的文件

1.2.4.1 编译后Ubuntu路径:

out/ohos-arm-release/packages/phone/system/profile/updater_sa.xml

1.2.4.2 内容:

云服务器
滇ICP备2023000592号-31