@IT·互联网鸿蒙(HarmonyOS)开发知识

OpenHarmony应用编译 - 如何在源码中编译复杂应用(3

2024-09-09  本文已影响0人  迪士尼在逃程序员

概述

文档环境

开发环境:Windows 11
编译环境:Ubuntu 22.04
开发板型号:DAYU 200(RK3568)
系统版本:OpenHarmony-3.2-Release

功能简介

3.2-Release 系统编译 Launcher

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

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

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

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

内容如下:

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" ]
}

说明:

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

内容如下:

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" ]
}

说明:

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

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

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

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

5.在 applications/standard/hap/ohos.build 文件 module_list 中增加 launcher_hap 模块和 launcher_settings_hap 模块编译。

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

6.修改预编译配置 build/prebuilts_download_config.json 文件,把 launcher 依赖增加到 npm_install_path 列表中。

{
  "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"
  ],
  ...
}

7.执行预编译指令。

bash build/prebuilts_download.sh --skip-ssl

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

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

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

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

9.烧录系统验证功能。

Launcher 正常启动:

系统应用目录文件正确:

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙

上一篇 下一篇

猜你喜欢

热点阅读