OpenHarmony开发者论坛

标题: OpenHarmony应用编译 - 如何在源码中编译复杂应用(3.2-Release) [打印本页]

作者: tizizzz    时间: 2023-12-7 08:52
标题: OpenHarmony应用编译 - 如何在源码中编译复杂应用(3.2-Release)
[md]# 概述

## 文档环境

开发环境:Windows 11

编译环境:Ubuntu 22.04

开发板型号:DAYU 200(RK3568)

系统版本:OpenHarmony-3.2-Release

涉及仓库:[applications\_launcher](https://gitee.com/openharmony/applications_launcher)

## 功能简介

* 在OpenHarmony系统中预安装应用的hap包会随系统编译打包到镜像中,目前有两种编译预安装应用hap包的方式,一种为随系统编译时,编译应用源码生成hap包的方式,另一种是将已生成的hap包放入系统源码中,再进行打包的方式。后者需要开发者使用DevEco Studio或其它途径,把应用源码编译构建为hap包,再将hap放入系统源码中。
* 本文档以系统应用**Launcher**为例,带大家了解如何通过系统源码编译应用的方式来打包预安装应用。

# 3.2-Release系统编译Launcher

1.删除或注释系统中默认的**Launcher**应用**hap**包编译方式。

文件位置:**applications/standard/hap/BUILD.gn**

```cpp
group("hap") {
  deps = [
            ...
      # "//applications/standard/hap:launcher_hap", // 直接删除或注释,不参与编译
      # "//applications/standard/hap:launcher_settings_hap",  // 直接删除或注释,不参与编译
            ...
  ]
}
```

![](https://harmonyos.oss-cn-beijing ... 794bff93aa3e5b7.png)

2.在**applications/standard/launcher/product/phone**目录中增加**BUILD.gn**文件。

![](https://harmonyos.oss-cn-beijing ... 384a364c4d1ffe7.png)

内容如下:

```cpp
import("//build/ohos.gni")

ohos_hap("launcher_hap") {
  hap_profile = "src/main/module.json"
  deps = [
    ":launcher_js_assets",
    ":launcher_resources",
  ]
  certificate_profile = "../../signature/launcher.p7b"
  hap_name = "Launcher_OS"
  part_name = "prebuilt_hap"
  subsystem_name = "applications"
  js_build_mode = "release"
  module_install_dir = "app/com.ohos.launcher"
}

ohos_js_assets("launcher_js_assets") {
  ets2abc = true
  source_dir = "src/main/ets"
}

ohos_resources("launcher_resources") {
  sources = [ "src/main/resources", "../../common/src/main/resources" ]
  deps = [ ":launcher_app_profile" ]
  hap_profile = "src/main/module.json"
}

ohos_app_scope("launcher_app_profile") {
  app_profile = "../../AppScope/app.json"
  sources = [ "../../AppScope/resources" ]
}
```

说明:

* 此处把产物名称**hap\_name**定义为**Launcher\_OS**是为了区分原系统源码中默认的**hap**包名称,实际可以填写为**Launcher**。
* 因为**launcher\_hap**中使用了其它**har**(common)中的资源,所以**launcher\_resources**中的**sources**需要添加依赖的**resources**资源目录,在步骤3中**launcher\_settings\_hap**
  中的配置也是如此。

3.在**applications/standard/launcher/feature/settings**目录中增加**BUILD.gn**文件。

![](https://harmonyos.oss-cn-beijing ... 0a77b5d2da07910.png)

内容如下:

```cpp
import("//build/ohos.gni")

ohos_hap("launcher_settings_hap") {
  hap_profile = "src/main/module.json"
  deps = [
    ":launcher_settings_js_assets",
    ":launcher_settings_resources",
  ]
  certificate_profile = "../../signature/launcher.p7b"
  hap_name = "Launcher_Settings_OS"
  part_name = "prebuilt_hap"
  subsystem_name = "applications"
  js_build_mode = "release"
  module_install_dir = "app/com.ohos.launcher"
}

ohos_js_assets("launcher_settings_js_assets") {
  ets2abc = true
  source_dir = "src/main/ets"
}

ohos_resources("launcher_settings_resources") {
  sources = [ "src/main/resources", "../../common/src/main/resources" ]
  deps = [ ":launcher_settings_app_profile" ]
  hap_profile = "src/main/module.json"
}

ohos_app_scope("launcher_settings_app_profile") {
  app_profile = "../../AppScope/app.json"
  sources = [ "../../AppScope/resources" ]
}
```

说明:

* 此处把产物名称**hap\_name**定义为**Launcher\_Settings\_OS**是为了区分原系统源码中默认的**hap**包名称,实际可以填写为**Launcher\_Settings**。

4.因为系统编译只可读取**json**后缀的配置文件,所以需要把应用源码中的**app.json5**和**module.json5**文件复制,并改名为**app.json**和**module.json**文件。

(1)复制**applications/standard/launcher/AppScope/app.json5**文件为**app.json。**

![](https://harmonyos.oss-cn-beijing ... 57897cb3fd500e8.png)

(2)复制**applications/standard/launcher/product/phone/src/main/module.json5**文件为**module.json。**

![](https://harmonyos.oss-cn-beijing ... e6c45265f43e7c1.png)

(3)复制**applications/standard/launcher/feature/settings/src/main/module.json5**文件为**module.json。**

![](https://harmonyos.oss-cn-beijing ... 62562342b431bf8.png)

5.在**applications/standard/hap/ohos.build**文件**module\_list**中增加**launcher\_hap**模块和**launcher\_settings\_hap**模块编译。

```cpp
{
  "subsystem": "applications",
  "parts": {
    "prebuilt_hap": {
                  ...
      "module_list": [
               ...
        "//applications/standard/launcher/product/phone:launcher_hap",
        "//applications/standard/launcher/feature/settings:launcher_settings_hap",
        ...
      ]
    }
  }
}
```

![](https://harmonyos.oss-cn-beijing ... d6fe4b474007eb1.png)

6.修改预编译配置**build/prebuilts\_download\_config.json**文件,把**launcher**依赖增加到**npm\_install\_path**列表中。

```cpp
{
  "prebuilts_download_dir": "../OpenHarmony_canary_prebuilts",
  "npm_install_path": [
    "developtools/ace_ets2bundle/compiler",
    "developtools/ace_js2bundle/ace-loader",
    "third_party/jsframework",
    "arkcompiler/ets_frontend/ts2panda",
    "arkcompiler/ets_frontend/legacy_bin/api8",
    "interface/sdk-js/build-tools",
    "applications/standard/launcher/common",
    "applications/standard/launcher/feature/appcenter",
    "applications/standard/launcher/feature/bigfolder",
    "applications/standard/launcher/feature/form",
    "applications/standard/launcher/feature/gesturenavigation",
    "applications/standard/launcher/feature/numbadge",
    "applications/standard/launcher/feature/pagedesktop",
    "applications/standard/launcher/feature/recents",
    "applications/standard/launcher/feature/smartdock",
    "applications/standard/launcher/feature/settings",
    "applications/standard/launcher/product/phone"
  ],
  ...
}
```

![](https://harmonyos.oss-cn-beijing ... 59d75bc323cd05d.png)

7.执行预编译指令。

```cpp
bash build/prebuilts_download.sh --skip-ssl
```

可以在应用源码中看到应用内的依赖已经被正确的加载。

![](https://harmonyos.oss-cn-beijing ... acad081ce6681f9.png)

8.执行源码编译指令。如果以下2个目录产物正确,则说明应用源码编译方式修改成功。

(1)在**out/rk3568/obj/applications/standard/launcher**目录中,会生成2个hap的编译产物。

![](https://harmonyos.oss-cn-beijing ... 143052f43ec625a.png)

(2)在**out/rk3568/packages/phone/system/app/com.ohos.launcher**目录中,是实际系统环境中的hap包产物。

![](https://harmonyos.oss-cn-beijing ... 8d8bf8381217f5c.png)

9.烧录系统验证功能。

Launcher正常启动:

![](https://harmonyos.oss-cn-beijing ... 5a31c3a9dd2718.jpeg)

系统应用目录文件正确:

![](https://harmonyos.oss-cn-beijing ... 31360c997563967.png)
[/md]




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5