OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境

开发环境:Windows 11

编译环境:Ubuntu 22.04

开发板型号:DAYU 200(RK3568)

系统版本:OpenHarmony-4.0-Release

功能简介

  • OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中,目前有两种编译预安装应用 hap 包的方式,一种为随系统编译时,编译应用源码生成 hap 包的方式,另一种是将已生成的 hap 包放入系统源码中,再进行打包的方式。后者需要开发者使用 DevEco Studio 或其它途径,把应用源码编译构建为 hap 包,再将 hap 放入系统源码中。
  • 本文档将以 Launcher 为例,带大家了解如何通过 4.0Release 的系统源码编译应用的方式来打包预安装应用。
  • 由于应用依赖和构建工具的升级和替换,3.2Release 系统编译构建应用的方式是 NPM+Webpack ,而 4.0Release 使用 OHPM+Hvigor 的方式进行构建,差别较大。

4.0-Release 系统编译 Launcher

1.由于 Launcher 自身原因,导致需要做 2 处改动才可进行源码编译构建。本步骤并非所有项目通用,如果新建的项目可以跳过本步骤,后续 Launcher 或工具更新后也不需要本步骤。

(1)适配系统源码中 NODE_HOME 环境变量的配置,需要修改应用目录下 hvigorw 工具为最新。

文件位置:applications/standard/launcher/hvigorw

内容如下:

复制代码
#!/bin/bash

# ----------------------------------------------------------------------------
#  Hvigor startup script, version 1.0.0
#
#  Required ENV vars:
#  ------------------
#    NODE_HOME - location of a Node home dir
#    or
#    Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------

HVIGOR_APP_HOME="`pwd -P`"
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {
	echo ""
	echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}

error() {
	echo ""
	echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}

fail() {
	error "$@"
	exit 1
}

# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];then
   EXECUTABLE_NODE="${NODE_HOME}/bin/node"
   if [ ! -x "$EXECUTABLE_NODE" ];then
       fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"
   fi
else
   EXECUTABLE_NODE="node"
   which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi

# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
	fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi

# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \
	"${HVIGOR_WRAPPER_SCRIPT}" "$@"

(2)由于系统编译应用目前不支持配置产品,所以需要把 Launcher 应用源码中有关 pad 的构建项删除。

文件位置:applications/standard/launcher/build-profile.json5

内容如下:

复制代码
{
  	...
    {
      "name": "phone_launcher",
      "srcPath": "./product/phone",
      "targets": [
        {
          "name": "default",
          "applyToProducts": [
            "default",
          ],
        },
      ],
    },
    {
      "name": "launcher_settings",
      "srcPath": "./feature/settings",
      "targets": [
        {
          "name": "default",
          "applyToProducts": [
            "default",
          ],
        },
      ],
    }
  ],
}

文件位置:applications/standard/launcher/feature/settings/build-profile.json5

内容如下:

复制代码
{
  "apiType": 'stageMode',
  "buildOption": {
  },
  "targets": [
    {
      "name": "default",
    }
  ],
  "entryModules": ["phone_launcher"]
}

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

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

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

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

内容如下:

复制代码
import("//build/ohos.gni")

ohos_app("launcher_OS") {
  part_name = "prebuilt_hap"
  subsystem_name = "applications" 
  hap_name = "Launcher_OS"   
  certificate_profile = "./signature/launcher.p7b"
  module_libs_dir = "entry"
  module_install_dir = "app/com.ohos.launcher"
  js_build_mode = "release"
  build_level = "module"
  assemble_type = "assembleHap"
}

说明:

  • 此处产物名称 hap_name 定义为 Launcher_OS 是为了区分原系统源码中默认的 hap 包名称,实际可以填写为 Launcher 或任意值。
  • BUILD.gn 的模板参数可以参考编译系统提供的模板。

4.在 applications/standard/hap/ohos.build 文件的 module_list 中增加 launcher_OS 模块编译。

复制代码
{
  "subsystem": "applications",
  "parts": {
    "prebuilt_hap": {
	  	...
      "module_list": [
       	...
       "//applications/standard/launcher:launcher_OS",
        ...
      ]
    }
  }
}

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

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

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

6.烧录系统验证功能。

Launcher 正常启动:

系统应用目录文件正确:

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

相关推荐
b1305381004911 分钟前
HarmonyOS应用开发实战:萌宠日记 - 环比增长指示器
harmonyos·鸿蒙
爱写代码的森18 分钟前
鸿蒙三方库 | harmony-utils之LocationUtil位置获取与订阅详解
华为·harmonyos·鸿蒙·huawei
Helen_cai40 分钟前
OpenHarmony API23 四层模块化脚手架完整实现(含全套工具源码)
华为·harmonyos
qizayaoshuap1 小时前
# [特殊字符] 指南针 — 鸿蒙ArkTS方向计算与方位跟踪系统
华为·harmonyos
达子6661 小时前
第5章_图解harmonyos Ability基础知识
华为·harmonyos
国服第二切图仔1 小时前
02-breakpoint-system
运维·harmonyos
Helen_cai1 小时前
EntryAbility 全局初始化 + 网络请求 HttpUtil 完整源码
网络·华为·harmonyos
SuperHeroWu71 小时前
【HarmonyOS AI】DevEco CLI、Skills、知识库运用AI Coding提效详解
人工智能·华为·harmonyos
熊猫钓鱼>_>2 小时前
ArkUI 动画实战:从理论到交互,构建流畅的鸿蒙动效体验
华为·架构·交互·harmonyos·arkts·arkui·native
Catrice02 小时前
HarmonyOS ArkTS 实战:实现一个校园宿舍电费查询与分摊应用
华为·harmonyos