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

TiZizzz
发布于 2024-12-7 12:28
浏览
1收藏

概述

文档环境

开发环境:Windows 11

编译环境:Ubuntu 20.04

系统分支:OpenHarmony-5.0.0-Release

(本文源码拉取时间:2024-12-07)

开发板型号:DAYU 200(RK3568)

系统版本号:OpenHarmony 5.0.0.71

涉及仓库:

功能简介

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

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

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

5.0.0-Release系统编译Launcher

1. 由于Launcherg工程自身原因,导致需要做两处改动才可进行源码编译构建。本步骤并非所有项目通用,如果新建的项目可以跳过本步骤。

(1)修改工程级别build-profile.json5文件,适配正确的SDK版本。

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

内容如下:

{
  "app": {
    "products": [
      {
        "name": "default",
        "signingConfig": "default",
        "compileSdkVersion": 12,
        "compatibleSdkVersion":12,
        "runtimeOS": "OpenHarmony"
      }
    ],
    ···
  },
  ···
}

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

内容如下:

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

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

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

内容如下:

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

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

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

6. 烧录系统验证功能。

Launcher正常启动:

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区

系统应用目录文件正确:

OpenHarmony应用编译 - 如何在源码中编译复杂应用(5.0.0-Release)-鸿蒙开发者社区


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-12-7 12:30:14修改
1
收藏 1
回复
举报
回复
    相关推荐