首页 > 编程语言 >OpenHarmony应用编译 - 如何在源码中编译复杂应用(3.2-Release)

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

时间:2023-12-14 11:01:22浏览次数:29  
标签:OpenHarmony .. applications launcher app standard 编译 源码 hap

概述

文档环境

开发环境:Windows 11

编译环境:Ubuntu 22.04

开发板型号:DAYU 200(RK3568)

系统版本:OpenHarmony-3.2-Release

涉及仓库:applications_launcher

功能简介

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

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",  // 直接删除或注释,不参与编译
    	...
  ]
 }

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

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

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

内容如下:

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

说明:

  • 此处把产物名称hap_name定义为Launcher_OS是为了区分原系统源码中默认的hap包名称,实际可以填写为Launcher
  • 因为launcher_hap中使用了其它har(common)中的资源,所以launcher_resources中的sources需要添加依赖的resources资源目录,在步骤3中launcher_settings_hap
    中的配置也是如此。

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

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

内容如下:

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

说明:

  • 此处把产物名称hap_name定义为Launcher_Settings_OS是为了区分原系统源码中默认的hap包名称,实际可以填写为Launcher_Settings

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

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

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

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

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

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

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

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

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

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

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

7. 执行预编译指令。

bash build/prebuilts_download.sh --skip-ssl

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

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

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

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

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

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

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

9. 烧录系统验证功能。

Launcher正常启动:

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

系统应用目录文件正确:

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

本文作者:TiZizzz

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

51CTO 开源基础软件社区

https://ost.51cto.com/#bkwz

标签:OpenHarmony,..,applications,launcher,app,standard,编译,源码,hap
From: https://blog.51cto.com/harmonyos/8815945

相关文章

  • dft实战和源码剖析
    4.初步编写API3-02drf-初步使用drf项目下创建虚拟环境1.PSD:>django-adminstartprojectdrfd盘下创建drf项目2.PSD:>cddrf3.PSD:\drf>virtualenv-p"C:\ProgramFiles\Python311\python.exe".venv4.d:\pyproject项目目录下,虚拟环境执行pipfreeze>requi......
  • Java-研究HashMap的源码
    Java-研究HashMap的源码JDK版本:17类注释基于哈希表的Map接口实现。此实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,只不过它是不同步的并且允许null。)该类不保证映射的顺序;特别是,它不保证顺序随着时间的推移保持不变。此实现为基本操......
  • springboot004旅游路线规划系统(Java毕业设计,附数据库和源码)
    第一章绪论1.1选题背景与研究意义随着社会的不断进步,在居民生活水平提高的同时,人们当前在生活的方方面面也越来越注重服务所带来的体验,随着近几年国家政策大力发展旅游业,旅游景点的建设越来也完善,旅游业的发展速度得到了显著的提升。各大旅行社、旅游景点都不断的推出新的活动计......
  • 临床检验检查信息系统(LIS系统源码)C/S结构的应用模式
     LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。LIS采用C/S(Clien......
  • python3源码方式安装
    系统默认的python3版本过低,得自己安装高版本python3。步骤主要为:1、删除旧版本。2、安装依赖。3、下载源码。4、配置。5、编译。参考链接:CentOS7安装python3超详细教程1、删除旧版pyhton3,执行:rpm-qa|greppython3|xargsrpm-ev--allmatches--nodeps2、安装依赖,执行:yum-......
  • ubuntu 18.04.6 编译文件系统buildroot的时候提示 buildroot/output/host/ARM-buildro
    错误提示如下:ln::无法创建符号链接buildroot/output/host/ARM-buildroot-linux-gnueabihf/sysroot/usr/lib没有文件或目录  cd进入buildroot路径,先sudomakeclean 然后再cd..到software文件夹重新make就可以了。  ......
  • MyBatis-Plus雪花算法实现源码解析
    1.雪花算法(SnowflakeAlgorithm)雪花算法(SnowflakeAlgorithm)是一种用于生成唯一标识符(ID)的分布式算法。最初由Twitter公司开发,用于生成其内部分布式系统中的唯一ID。雪花算法的设计目标是在分布式系统中生成全局唯一的ID,同时保证ID的有序性和趋势递增。雪花算法生成的ID是64......
  • UBUNTU 18.04.6编译linux内核make ARCH=arm menuconfig提示recipe for target ‘menuc
    UBUNTU18.04.6编译linux内核makeARCH=armmenuconfig提示recipefortarget‘menuconfig’failed:这是因为没有安装图形化Kernel配置工具。要么安装libncurses5-dev库,要么安装libncurses-dev这是因为没有安装图形化Kernel配置工具。要么安装libncurses5-dev库,要么安......
  • UBUNTU 18.04.6 在编译LINUX内核的时候执行MAKE ARCH=ARM SOCFPGA_DEFCONFIG提示Can't
     Intel针对SoCFPGA芯片提供的Linux源码中已经提供好了一个名为socfpga_defconfig的配置文件,我们对内核的配置和修改,建议基于此配置文件进行,因此在进行配置前,需要先将该配置文件导入到默认配置文件.config中,操作方法很简单。 在终端输入makeARCH=armsocfpga_defconfig......
  • UBUNTU 18.04.6 在编译linux内核的时候执行make ARCH=arm socfpga_defconfig设置默认
    在编译linux内核的时候执行makeARCH=armsocfpga_defconfig设置默认配置时报错bisonflexnotfound缺少文件:/bin/sh:1:bison:notfound 输入命令sudoapt-getinstallbison进行安装: /bin/sh:1:flex:notfound 输入命令 sudoapt-getinstallflex进行安......