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

系统 OpenHarmony
在OpenHarmony系统中预安装应用的hap包会随系统编译打包到镜像中,目前有两种编译预安装应用hap包的方式,一种为随系统编译时,编译应用源码生成hap包的方式,另一种是将已生成的hap包放入系统源码中,再进行打包的方式。

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

概述

文档环境

  • 开发环境:Windows 11
  • 编译环境:Ubuntu 22.04
  • 开发板型号:DAYU 200(RK3568)
  • 系统版本:OpenHarmony-4.0-Release
  • 涉及仓库:applications_launcher

功能简介

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

4.0-Release系统编译Launcher

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

适配系统源码中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}" "$@"

由于系统编译应用目前不支持配置产品,所以需要把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"]
}

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

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

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

在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的模板参数可以参考编译系统提供的模板。

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

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

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

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

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

烧录系统验证功能。

Launcher正常启动:

系统应用目录文件正确:

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2023-12-11 17:26:21

Launcher鸿蒙预安装应用

2022-04-25 09:10:50

RK3568鸿蒙

2022-06-02 09:14:14

GNOME源码编译Linux 发行版

2022-02-21 14:49:26

OpenHarmon操作系统鸿蒙

2023-07-27 14:38:33

开源鸿蒙

2023-10-08 15:23:09

侧获取屏幕DPI鸿蒙

2022-04-29 14:56:40

通话应用源码剖析

2023-02-09 15:28:19

鸿蒙编译速度

2009-12-16 11:54:35

WindowsLinuxUnix

2011-03-14 13:51:00

iptables编译

2009-11-25 10:14:15

memcachedb编译安装

2010-04-12 11:19:47

编译内核模块

2024-07-26 16:39:33

鸿蒙系统开源构建系统

2022-04-18 10:37:01

鸿蒙操作系统开发工具

2021-07-02 20:37:19

Python代码SRP

2009-06-02 10:02:50

eclipse jboeclipse jbojboss for e

2022-07-15 09:01:15

React对象编程

2020-03-31 21:50:41

JavaScript前端技术

2022-02-08 15:15:26

OpenHarmonlinux鸿蒙
点赞
收藏

51CTO技术栈公众号