本文档说明在OpenHarmony 系统中,将已编译完成的 .so 动态库文件内置到设备例如/system/lib64/ 目录下的完整流程
包含 GN 编译配置编写、模块依赖添加、编译验证等步骤,确保 so 文件能随系统镜像编译打包并部署到指定路径。

适用场景

  • 已完成第三方 / 自定义库的编译,得到 libxxx.so 文件(本文示例:libv8_shared.so、libjsvm.so)
  • 需要将 so 文件固化到系统分区 /system/lib64/(64 位系统核心库目录)
  • 基于 OpenHarmony GN 构建系统进行产品编译

核心目录与文件说明

  • so 文件存放目录:vendor/product_name/jsvm/
    该目录下直接放置预编译好的 libv8_shared.so、libjsvm.so;
  • 编译配置文件:vendor/product_name/jsvm/BUILD.gn
    用于定义预编译库的安装规则;
  • 产品配置文件:产品编译配置文件(添加模块依赖)

1: 在产品路径下创建 jsvm 模块目录,将已编译好的 64 位 so 文件复制到该目录:

mkdir -p vendor/product_name/jsvm

2:编写 BUILD.gn 编译配置


# 引入OpenHarmony构建模板
import("//build/ohos.gni")

# 配置1:将 libv8_shared.so 安装到 /system/lib64/ 目录
ohos_prebuilt_etc("libv8_resources") {
  source = "libv8_shared.so"        # 本地so文件名(与当前目录一致)
  module_install_dir = "lib64"      # 安装路径:/system/lib64/
  install_images = [ system_base_dir ]  # 安装到system分区
  part_name = "*****"  # 产品部件名(必须与产品配置一致)
}

# 配置2:将 libjsvm.so 安装到 /system/lib64/ndk/ 目录
ohos_prebuilt_etc("libjsvm_resources") {
  source = "libjsvm.so"
  module_install_dir = "lib64/ndk/" # 子目录:/system/lib64/ndk/
  install_images = [ system_base_dir ]
  part_name = "******"
}

# 总模块入口,编译时依赖两个预编译库
group("jsvm") {
  deps = [
    ":libv8_resources",
    ":libjsvm_resources"
  ]
}

BUILD.gn 核心配置项说明:

配置项 作用
ohos_prebuilt_etc OpenHarmony 预编译文件专用模板,用于打包非源码编译的文件(so / 配置文件等)
source 本地待打包的 so 文件名(必须与目录中的文件名一致)
module_install_dir 目标安装路径:lib64 → /system/lib64/;lib64/ndk → /system/lib64/ndk/
install_images 指定安装到 system 系统分区
part_name 产品部件名称,必须与产品配置保持一致,否则编译报错
group 模块聚合入口,方便外部依赖

3:添加模块依赖到产品编译配置
找到你的产品编译配置文件(产品定义文件,通常为 .gn/.gni 格式),在依赖列表中添加我们编写的 jsvm 模块:

# 原有配置
*****
# 新增:添加jsvm模块依赖
"//vendor/product_name/jsvm:jsvm",
Logo

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

更多推荐