简介:

产品开发过程中,可能涉及多方合作伙伴,需要提供给伙伴可用的工程,但是有定制化模块可能针对伙伴不开源的情况,所以要进行闭源处理。

 

组件编译:

  • 编译方式

openharmony中将组件编译成动态库使用的是gn模版ohos_shared_library(libname),该模版将组件源码编译成libname.z.so

可以看到该模版中包含了编译所需的源码和头文件,使用属性sources和include_dirs设置,另外还包含了cflags属性设置编译参数。组件名为libhal,编译完成后将在out/产品下的子系统/部件目录生成libhal.z.so动态库。

闭源处理

对该组件进行闭源处理,ohos也提供了另一种预编译模版ohos_prebuilt_shared_library(libname),用于将已生成的so库做为编译组件。

 

 

通过source属性设置so库文件路径,此处填写的是相对于BUILD.gn文件的路径。

ohos_prebuilt_shared_library模版属性描述如下:

模版属性 是否需要 描述
sources 不需要 用于源码编译
include_dirs 不需要 用于源码编译
deps 不需要 用于源码编译
cflags 不需要 用于源码编译
source 需要 so文件路径
public_configs 按需配置 用于对外暴露的头文件配置
install_images 需要 通用属性
subsystem_name 需要 通用属性
part_name 需要 通用属性

如闭源库有需要对外暴露的头文件,需要配置public_configs属性,在public_configs中添加include_dirs属性设置头文件包含路径。

并且组件所在的部件bundle.json中需要将该组件添加到inner_kits属性中,header_base为对外暴露的头文件路径,header_files可以指定头文件目录下具体暴露的头文件,而非目录下所有头文件。

 

静态库处理

静态库源码编译模版ohos_static_library,预编译模版ohos_prebuilt_static_library,模版属性参考 动态库模板属性。

多架构

组件可能有多cpu架构支持的需求,那么就需要提供不同架构的闭源库,在编译时,我们需要根据当前产品是什么架构来选择使用对应的闭源库。

可以看到,ohos_prebuilt_static_library模版中使用的条件判断,target_cpu变量是ohos编译子系统提供的,该变量会根据所编译产品配置进行初始化。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐