harmonyOS编译流程

本文介绍了鸿蒙系统编译过程中的子系统配置文件(subsystem_config.json, product.json, device.json)作用,以及gn文件(gn, .gn)在配置和编译中的关键位置。重点讲解如何通过product_path找到子系统和组件,以及gngen执行后的产物。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编译的时候,需要扫描相应的子系统配置文件,子系统配置文件包含以下三个文件,定义了子系统的名称和所在路径。

  1. build文件夹下的subsystem_config.json文件,主要包含子系统名称与路径信息,在preloader阶段被加载,根据子系统名称和路径信息查找该路径下的ohos.build文件。
  2. product配置文件,在productdefine/common/products文件夹下,文件名为{产品名称}.json,在preloader阶段被加载。该配置文件主要包含产品名称,产品厂商,产品设备名,产品类型,产品对应子系统路径,产品所包含的部件等信息。配置该产品对应子系统时在该文件中添加product_build_path表示产品子系统目录,preloader阶段从该目录下加载对应子系统部件配置信息。
  3. device配置文件,在productdefine/common/device文件夹下,文件名为{产品设备名称}.json,在preloader阶段被加载。该配置文件主要包含设备名称,设备厂商,设备的目标os与目标cpu,设备对应子系统路径等信息。配置该设备对应子系统时在该文件中添加device_build_path表示设备子系统目录,preloader阶段从该目录下加载对应子系统部件配置信息。

现在支持在产品和设备配置的时候添加产品和设备对应的子系统路径,扫描时扫描对应目录下的子系统部件配置信息。

1、 gn gen
2、通过–dotfile指定根gn文件 build/lite/.gn
.gn文件的内容
**The location of the build configuration file. #1.完成gn的配置工作
buildconfig = “//build/lite/config/BUILDCONFIG.gn”
**The source root location. #2.完成gn的编译工作
root = “//build/lite”
3、构建编译 build/lite/BUILD.gn
有三个概念贯彻整个鸿蒙系统,子系统(subsystems),组件(components),功能(features).
先找到product_path下的 配置文件 config.json,里面配置了项目所要使用的子系统和组件.
再遍历项目所使用的组件是否能再 //build/lite/components/*.json组件集中能找到.
将找到的组件targets加入到编译列表deps中.targets指向了要编译的组件目录.例如内核组件时指向了://kernel/liteos_a:kernel,
4、结果文件
那么执行完gn gen 都会生成哪些文件和目录呢?
out/rk3568/
args.gn build.ninja build.ninja.d toolchain.ninja
其中build.ninja.d文件是所有BUILD.gn的依赖集合

### 编译第三方SO文件在HarmonyOS上的方法 对于HarmonyOS而言,编译第三方共享库(`.so` 文件),通常涉及几个重要步骤。虽然具体细节可能依赖于项目配置和所使用的开发工具链版本,但是基本流程可以概括如下: #### 准备工作环境 确保已经安装并设置了适用于HarmonyOS应用开发的IDE——DevEco Studio,并且正确配置了NDK (Native Development Kit),这是处理原生代码以及外部.so文件的基础。 #### 获取源码或预构建二进制文件 如果计划从头开始编译,则需获取目标库的源代码;如果是直接使用已有的.so文件,则应确认这些文件兼容HarmonyOS平台架构(ARM等)。这一步骤类似于其他操作系统下的操作[^1]。 #### 配置build.gradle文件 为了使工程能够识别到所需的第三方.so文件,在项目的 `build.gradle` 中适当位置添加必要的路径声明。例如,假设有一个位于特定目录中的 `.so` 文件想要加入classpath中,可以通过设置sourceSets来指定本地库的位置: ```groovy android { ... sourceSets { main { jniLibs.srcDirs = ['libs'] // 假设.so文件存放在project根目录下名为'libs'的文件夹内 } } } ``` 此部分借鉴自Android环境下引入第三方jar的经验,尽管HarmonyOS有其独特之处,但在概念层面二者相似[^4]。 #### 使用CMakeLists.txt集成 当涉及到更复杂的场景比如链接多个静态/动态库时,推荐采用CMake作为构建系统的一部分来进行管理。创建或编辑 `CMakeLists.txt` 来指明哪些库应该被包含进来及其相对路径: ```cmake add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp ) find_library( log-lib log ) include_directories(${PROJECT_SOURCE_DIR}/../prebuilt/include) target_link_libraries( # Specifies the target library. native-lib ${log-lib} # Adds pre-built .so files located in specified directory. ${PROJECT_SOURCE_DIR}/../prebuilt/lib/${ANDROID_ABI}/libexample.so ) ``` 这里展示了如何通过CMake脚本将预先存在的.so文件与当前项目关联起来。 #### 构建与测试 完成上述配置之后,利用DevEco Studio内置的功能执行同步、清理旧版构建产物再重新编译整个工程项目。成功后可以在模拟器或者真实设备上部署应用程序以验证新添入的.so功能模块是否正常运作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值