OpenHarmony so文件内置到设备操作文档
·
本文档说明在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",
更多推荐

所有评论(0)