当前位置:   article > 正文

OpenHarmony应用编译 - 如何在源码中编译复杂应用(4.0-Release)_源码制作hap包

源码制作hap包

概述

文档环境

开发环境: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

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

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

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

内容如下:

  1. #!/bin/bash
  2. # ----------------------------------------------------------------------------
  3. # Hvigor startup script, version 1.0.0
  4. #
  5. # Required ENV vars:
  6. # ------------------
  7. # NODE_HOME - location of a Node home dir
  8. # or
  9. # Add /usr/local/nodejs/bin to the PATH environment variable
  10. # ----------------------------------------------------------------------------
  11. HVIGOR_APP_HOME="`pwd -P`"
  12. HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
  13. warn() {
  14. echo ""
  15. echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
  16. }
  17. error() {
  18. echo ""
  19. echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
  20. }
  21. fail() {
  22. error "$@"
  23. exit 1
  24. }
  25. # Determine node to start hvigor wrapper script
  26. if [ -n "${NODE_HOME}" ];then
  27. EXECUTABLE_NODE="${NODE_HOME}/bin/node"
  28. if [ ! -x "$EXECUTABLE_NODE" ];then
  29. 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"
  30. fi
  31. else
  32. EXECUTABLE_NODE="node"
  33. which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
  34. fi
  35. # Check hvigor wrapper script
  36. if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
  37. fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
  38. fi
  39. # start hvigor-wrapper script
  40. exec "${EXECUTABLE_NODE}" \
  41. "${HVIGOR_WRAPPER_SCRIPT}" "$@"

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

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

内容如下:

  1. {
  2. ...
  3. {
  4. "name": "phone_launcher",
  5. "srcPath": "./product/phone",
  6. "targets": [
  7. {
  8. "name": "default",
  9. "applyToProducts": [
  10. "default",
  11. ],
  12. },
  13. ],
  14. },
  15. {
  16. "name": "launcher_settings",
  17. "srcPath": "./feature/settings",
  18. "targets": [
  19. {
  20. "name": "default",
  21. "applyToProducts": [
  22. "default",
  23. ],
  24. },
  25. ],
  26. }
  27. ],
  28. }

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

内容如下:

  1. {
  2. "apiType": 'stageMode',
  3. "buildOption": {
  4. },
  5. "targets": [
  6. {
  7. "name": "default",
  8. }
  9. ],
  10. "entryModules": ["phone_launcher"]
  11. }

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

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

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

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

内容如下:

  1. import("//build/ohos.gni")
  2. ohos_app("launcher_OS") {
  3. part_name = "prebuilt_hap"
  4. subsystem_name = "applications"
  5. hap_name = "Launcher_OS"
  6. certificate_profile = "./signature/launcher.p7b"
  7. module_libs_dir = "entry"
  8. module_install_dir = "app/com.ohos.launcher"
  9. js_build_mode = "release"
  10. build_level = "module"
  11. assemble_type = "assembleHap"
  12. }

说明:

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

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

  1. {
  2. "subsystem": "applications",
  3. "parts": {
  4. "prebuilt_hap": {
  5. ...
  6. "module_list": [
  7. ...
  8. "//applications/standard/launcher:launcher_OS",
  9. ...
  10. ]
  11. }
  12. }
  13. }

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正常启动:

系统应用目录文件正确:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/998803
推荐阅读
相关标签
  

闽ICP备14008679号