【HarmonyOS Next之旅】DevEco Studio使用指南(四十) -> 灵活定制编译选项

【HarmonyOS Next之旅】DevEco Studio使用指南(四十) -> 灵活定制编译选项

目录

1 -> 指定编译模式

1.1 -> 界面设置

1.2 -> 命令行设置

2 -> 定制编译模式

2.1 -> 定义编译选项

2.2 -> 合并编译选项规则

2.3 -> 编译选项继承覆写关系

3 -> 实践说明

3.1 -> 工程级build-profile.json5示例

3.2 -> 模块级build-profile.json5示例

3.2.1 -> entry模块

3.3 -> 指定构建模式

3.3.1 -> 命令行

3.3.2 -> DevEco Studio界面


1 -> 指定编译模式

1.1 -> 界面设置

DevEco Studio支持界面配置Build Mode配置选项,点击右上角

图标选择编译模式:

内置三个选项:<Default>,debug,release。

如果在build-profile.json5文件中,自定义了其他编译模式,Build Mode配置界面会提供对应选项。

  • <Default>:默认选项,选择此项,构建APP包,使用release编译模式;构建HAP/HSP/HAR包,使用debug编译模式。
  • debug:构建APP/HAP/HSP/HAR包,均使用debug编译模式,buildOption中的debuggable默认为true。此时的构建产物默认包含大量的调试信息,例如变量名、函数名、行号等,可以直接进行调试。这些调试信息会增加程序的体积,可能导致程序的运行速度降低。
  • release:构建APP/HAP/HSP/HAR包,均使用release编译模式,buildOption中的debuggable默认为false。此时的构建产物会去掉大量的调试信息,只包含应用程序必要的代码和数据,以减小程序的体积,并且会对编译的字节码进行优化,提高程序的运行速度。

说明

  • DevEco Studio界面设置或命令行中指定的buildMode构建模式,只代表当前选择的buildMode的名称,最终编译产物是否是Debug应用取决于buildOption配置中的debuggable字段,构建模式使用的具体buildOption配置信息。
  • LiteWearable设备使用标准JS运行时,因此对应的应用开发在release模式下的构建产物中包含JS源码,请注意代码资产保护。

1.2 -> 命令行设置

  • 使用命令行参数-p buildMode指定编译模式,比如指定"release"编译模式,构建entry模块的HAP包:
hvigorw --mode module -p product=default -p module=entry@default -p buildMode=release assembleHap
  • 使用命令行参数-p debuggable=true指定"debug"编译模式,-p debuggable=false指定"release"编译模式,比如指定"release"编译模式,构建entry模块的HAP包:
hvigorw --mode module -p product=default -p module=entry@default -p debuggable=false assembleHap

当未指定编译模式时,构建APP包,默认release模式;构建HAP/HSP/HAR包时,默认debug模式。

2 -> 定制编译模式

Hvigor支持定制编译模式,采用buildOption字段声明编译选项,并通过buildModeBinder来绑定target、 buildOption以及buildMode三者之间的组合关系。

2.1 -> 定义编译选项

工程级build-profile.json5文件:

字段类型是否必填说明
buildModeSetarray构建模式合集,可配置多个。
namestring

构建模式名称。

内置三种类型,此三项无需用户显性配置:

  • debug:开发、调试推荐选项
  • release:打包、发布推荐选项
  • test:运行ohosTest测试套件推荐选项

    说明

    1. 项目中全局唯一,不区分大小写

    2. 仅允许在工程级build-profile.json5中声明、定义

    3. 相同的buildMode会被覆盖,按照配置顺序,后者覆盖前者

    4. 三种模式均支持自定义

buildOptionobject构建模式使用的具体配置信息
productsarray产品品类,可配置多个。
buildOptionobject

产品的编译构建配置。

说明

product的buildOption会对buildMode的buildOption继承覆写,即相同配置项product的优先级更高。

模块级build-profile.json5文件:

字段类型是否必填说明
buildOptionobject构建模式使用的具体配置信息,其中仅支持配置resOptions,externalNativeOptions,sourceOption,nativeLib,napiLibFilterOption和arkOptions字段。
buildOptionSetarraybuildOption的集合,定义可用的底层配置选项集。
namestring

buildOption的名称。

当前模块级build-profile.json5中已有顶层独立的buildOption配置,buildOptionSet优先级比buildOption更高。

说明

  1. 同模块中唯一,不区分大小写。
  2. 相同的名称会被覆盖,按照配置顺序,后者覆盖前者。
  3. 内置三种:default、debug、release。
copyFromstring

配置已定义的buildOption的name,表示从本模块已有的buildOption复制配置,然后再覆写。

说明

  1. 仅限在同一模块的build-profile.json5中复制。
  2. 目标buildOption不存在时,构建告警,回落为从内置的default选项中复制。
buildModeBinderarray为某一buildMode建立target与buildOption之间的映射关系。
buildModeNamestring

指定待建立映射的buildMode。

说明

  1. 模块级中无法定义buildMode,此处名称须在工程级的buildModeSet中选取。
  2. 对于系统内置的三种buildMode(debug / release / test), Hvigor会分配默认绑定:
    • debug mode:优先分配debug buildOption,测试包(ohosTest)分配default buildOption。
    • release mode:优先分配release buildOption,测试包(ohosTest)分配 default buildOption。
    • test mode:【测试套使用】测试包(ohosTest)分配default buildOption,主包分配debug buildOption。
mappingsarray绑定target使用的buildOption。
targetNamestring

指定待绑定的target。

说明

仅在本模块选择。

buildOptionNamestring

指定待绑定的buildOption。

说明

仅在本模块选择。

targetsconfigbuildOptionobject构建模式使用的具体配置信息,优先级比buildOptionSet更高。

2.2 -> 合并编译选项规则

  1. 工程级默认有三种buildMode:debug,release,test。
  2. 模块级默认有三种buildOption:default,debug,release。
  3. 当buildModeBinder未定义target与buildOption的匹配关系时:
  • release构建模式:为target匹配release option,但ohosTest分配default option;
  • debug构建模式:为target匹配debug option,但ohosTest分配default option;
  • test构建模式:为target匹配debug option,ohosTest分配default option;
  • 自定义构建模式:所有target均匹配default option。
  1. 工程级build-profile.json5中product的buildOption会对buildMode的buildOption继承覆写,即相同配置项product的优先级更高。
  2. 模块级别的buildOption作为一个公共配置会被继承到buildOptionSet中的每一个buildOption中,如有copyFrom字段,也是先继承再进行复制,即buildOptionSet优先级比buildOption更高。
  3. 根据模块级中的buildModeBinder字段可以找到target对应的唯一buildOption;target中的buildOption优先级更高,采用继承覆盖策略与对应buildOption进行合并。
  4. 命令行选项为最高优先级,在已整合的配置项基础上,采用覆写的方式,定点修订。

2.3 -> 编译选项继承覆写关系

优先级:命令行配置>targets配置>buildOptionSet配置>buildOption配置>products配置>buildModeSet配置

3 -> 实践说明

应用正式对外布版本前,需要对应用进行代码调试。调试和正式发布版本,两者编译行为可能不同。此时,可以利用buildMode能力,来定制两个版本的编译差异性。

假设其中构建产物均为default,但编译行为不同:release模式下使能混淆,debug模式下使能debug调试。

示例工程中包含一个模块entry,将entry模块交付到构建产物default中,模块定制两种不同的编译模式debug、release,将两种构建模式均绑定到构建产物default中。工程示例图如下(模块):

3.1 -> 工程级build-profile.json5示例

{ "app": { "signingConfigs": [], "products": [ { "name": "default", "signingConfig": "default", "compatibleSdkVersion": "5.0.2(14)", "runtimeOS": "HarmonyOS", "buildOption": { "strictMode": { "caseSensitiveCheck": true, "useNormalizedOHMUrl": true } } } ], "buildModeSet": [ { "name": "debug", }, { "name": "release", } ] }, "modules": [ { "name": "entry", "srcPath": "./entry", "targets": [ { "name": "default", "applyToProducts": [ "default" ] } ] } ] }

3.2 -> 模块级build-profile.json5示例

3.2.1 -> entry模块

{ "apiType": "stageMode", "buildOption": { }, "buildOptionSet": [ { "name": "release", "arkOptions": { "obfuscation": { "ruleOptions": { "enable": true, "files": [ "./obfuscation-rules.txt" ] } } } }, { "name": "debug", "debuggable": true, "arkOptions": { "obfuscation": { "ruleOptions": { "enable": false } } } } ], "buildModeBinder": [ { "buildModeName": "release", "mappings": [ { "buildOptionName": "release", "targetName": "default" } ] }, { "buildModeName": "debug", "mappings": [ { "buildOptionName": "debug", "targetName": "default" } ] } ], "targets": [ { "name": "default", }, { "name": "ohosTest", } ] }

3.3 -> 指定构建模式

3.3.1 -> 命令行

示例1:构建APP时,构建产物为default,指定构建模式为debug,可执行如下命令:

hvigorw --mode project -p product=default -p buildMode=debug assembleApp

编译产物示例如下:

示例2:构建APP时,构建产物为default,指定构建模式为release,可执行如下命令:

hvigorw --mode project -p product=default -p buildMode=release assembleApp

编译产物示例如下:

3.3.2 -> DevEco Studio界面

在DevEco Studio界面进行可视化配置,Build Mode下拉选择对应配置选项debug后,点击Build -> Build Hap(s)/APP(s) -> Build APP(s) ,构建编译模式为debug,构建产物为default的APP包。


感谢各位大佬支持!!!

互三啦!!!

Read more

Python(29)Python生成器函数深度解析:asyncio事件循环的底层实现与异步编程实战

Python(29)Python生成器函数深度解析:asyncio事件循环的底层实现与异步编程实战

目录 * 引言 * 一、生成器与异步编程的渊源 * 1.1 技术背景与发展 * 1.2 关键结合点:协程概念 * 1.3 实际应用演进 * 1.4 底层实现原理 * 1.5 生成器的基础特性代码 * 1.6 协程的进化之路代码 * 二、asyncio事件循环深度解析 * 2.1 事件循环架构 * 2.2 生成器调度流程 * 三、高级特性实现 * 3.1 生成器双向通信 * 3.2 异常处理机制 * 四、性能优化实战 * 4.1 内存管理对比 * 4.2 执行时间优化技巧 * 五、实践建议 * 5.

By Ne0inhk
Python中秋月圆夜:手把手实现月相可视化,用代码赏千里共婵娟

Python中秋月圆夜:手把手实现月相可视化,用代码赏千里共婵娟

文章目录 * 📖 引言 * 🎯 项目概述 * 🛠️ 技术架构解析 * 项目结构 * 💡 实现思路 * 月相计算核心 * 可视化难点 * 核心模块设计 * `moon_calculator.py` - 核心计算引擎 * 可视化渲染类 * 📊 四种图表实现详解 * 时间轴图表 - 连续月相展示 * 月相曲线图 - 数学规律可视化 * 当前月相图 * 图像Base64编码 * 🌐 HTML界面生成 * `generate_html.py` - 界面组装器 * CSS3特效设计 * JavaScript交互特效 * 🌟 结语 📖 引言 中秋节,这个承载着千年文化的传统节日,以其独特的满月寓意着团圆与和谐。我们不妨用Python这门优雅的编程语言,来创造一个富有诗意的中秋节月相可视化器。本文将带您通过代码的艺术,重现天空中月亮的盈亏变化,并在中秋节这个特殊的日子里,为我们的程序增添一抹传统文化的色彩。 🎯 项目概述 我们将构建一个功能丰富的月相可视

By Ne0inhk
AI 的智能体专栏:手把手教你用豆包打造专属 Python 智能管家,轻松解决编程难题

AI 的智能体专栏:手把手教你用豆包打造专属 Python 智能管家,轻松解决编程难题

AI 的智能体专栏:手把手教你用豆包打造专属 Python 智能管家,轻松解决编程难题 AI 的智能体专栏:手把手教你用豆包打造专属 Python 智能管家,轻松解决编程难题,本文介绍了如何利用豆包平台打造专属Python智能管家。首先简述豆包平台的核心优势,接着说明创建前的准备工作,包括注册账号、明确定位和收集训练资料。随后详细讲解创建流程,从新建智能体、基础设置、能力配置到测试优化,还提及集成代码执行环境等高级功能扩展,以及使用技巧与实际应用案例。该智能官能解决多种Python编程问题,可提升学习效率和问题解决速度,是实用的个性化编程助手。 前言     人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。无论你是刚接触 AI 的新手,还是有一定基础想提升的人,都能在这里找到合适的内容。从最基础的工具操作方法,到背后深层的技术原理,专栏都有讲解,还搭配了实例教程和实战案例。这些内容能帮助学习者一步步搭建完整的 AI 知识体系,让大家快速从入门进步到精通,

By Ne0inhk
【Python】基础语法入门(一)

【Python】基础语法入门(一)

前言 Python作为一门入门门槛低、生态丰富的编程语言,Python早已成为编程初学者、数据分析从业者、后端开发者的首选工具之一。而掌握Python的第一步,就是吃透最核心的基础语法,常量与表达式、变量与类型、注释、输入输出及运算符。今天,我们就结合实例,手把手带你入门这些必备知识点,助你快速搭建Python语法框架。 一、常量与表达式 刚接触 Python 时,我们可以先把它当作一个功能强大的计算器 ,通过简单的表达式,以完成各类算术运算,比如简单的加减乘除,甚至复杂的乘方运算,都能直接通过“表达式”实现。 核心知识点: 1. 表达式与常量:形如1 + 2 * 3的算式称为“表达式”,运算结果为“表达式的返回值”;1、2、3这类固定值称为“字面值常量”,+、-、*、/则是“运算符”。 2. 运算规则:遵循“先乘除后加减”的数学逻辑,

By Ne0inhk