OpenHarmony L1 系统(即轻量系统,small system) 与标准系统(L2/L3)在 BUILD.gn 构建规则 上的核心区别

一、两类规则的根本区别

   

类型

使用场景

调用层

特征

GN 原生规则(不带前缀)
shared_library、static_library、executable

L1/Lite 系统(如轻量内核、Hi3861、Hi3516DV300 小系统)

GN 内置

 直接生成 .a、.so、可执行文件,无 OpenHarmony 扩展逻辑

OHOS 扩展规则(带 ohos_ 前缀)
ohos_shared_library、ohos_static_library

L2/L3 标准系统(如带 Linux 内核或 AOSP 基座的系统)

由 build/ohos/ohos_var.gni 定义

除 GN 原生行为外,还会执行 OHOS 特定逻辑(如 bundle 输出路径、部件依赖、签名、模块打包等) 

 

二、规则区别详细分析
     

                                  shared_library vs ohos_shared_library

项目 shared_library("xxx") ohos_shared_library("xxx")
定义位置 GN 原生 OpenHarmony 扩展宏
产物类型 生成 .so 生成 .so 并注册到 OHOS 模块体系
安装路径 out/xxx/lib 自动进入 system/lib 或 vendor/lib
元信息(bundle.json) 不处理 自动关联 bundle.json 组件信息
编译依赖 手动 deps 指定 可通过 external_deps 引用其他子系统组件
典型用途 小系统组件(如内核、驱动、liteos 模块) 标准系统的服务、应用、动态库

         在 L1 系统中:
                       由于没有 bundle.json / 子系统模块化体系,也没有 system/vendor 分区概念,因此只需要使用原生 shared_library 即可。

 

                                  static_library vs ohos_static_library

项目 static_library ohos_static_library
产物 .a 文件 .a 文件(但会纳入 OHOS 构建系统)
作用 模块静态链接 可被其他 ohos_xxx 规则依赖
是否注册到系统
L1 场景是否可用 推荐使用 通常不需要

 

                 lite_component 与 lite_library 这两个是 LiteOS / L1 专用规则,由 build/lite 下的模板定义,

                 作用类似于 ohos_xxx,但针对小系统裁剪过。

规则 说明 功能特点
lite_component L1 的逻辑组件定义,支持依赖描述、模块组装 类似于标准系统的 subsystem 级注册
lite_library L1 的轻量库构建规则,封装了 static_library 或 shared_library 适配小系统的编译路径和安装路径规则

 

          举例:

lite_library("wifiservice") {
    sources = [ "wifi_service.c" ]
    deps = [ "//foundation/communication/wifi_lite:core" ]
}

表示构建一个 L1 环境可用的轻量库。

 

三、为什么 L1 系统都用不带 ohos 前缀的?

因为 L1 系统不依赖 HAP/Bundle 框架,也没有完整的部件描述系统(bundle.json、external_deps、part_name 等),
而 ohos_shared_library / ohos_static_library 的模板内部强依赖这些全量系统机制。
在 L1 中,只需纯 GN 构建逻辑 + LiteOS 驱动/服务注册体系

 

OpenHarmony 官方文档:https://gitee.com/openharmony/build    构建系统主仓

 

 

 

 

 

 

 

 

 

 

 

Logo

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

更多推荐