鸿蒙5.0开发进阶:配置构建-多模块管理

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


多模块管理

模块是应用/元服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/元服务配置文件,Hvigor支持工程多模块管理。您可在工程下的build-profile.json5配置文件中增加对应模块信息,即可对模块进行工程绑定和管理,或在hvigorconfig.ts脚本中动态添加或排除某个模块。同时也支持分模块配置、编译和打包。

多模块配置

静态配置模块

工程级build-profile.json5配置文件中"modules"字段,用于记录工程下的模块信息,主要包含模块名称、模块的源码路径以及模块的target信息。

例如以下目录中存在两个模块目录,您可在工程下的build-profile.json5配置文件,添加模块信息,使得模块与工程进行绑定:

Hvigor工程结构
└─ .hvigor目录    // 构建项目的缓存文件目录,不需要开发者改动,可以删除
└─ module1
   └─ 模块源码文件
   └─ build-profile.json5    // 模块级别的构建静态配置文件,主要用于定义当前模块的构建信息、hap(hsp、har)的构建行为等
   └─ hvigorfile.ts    // 模块级别的构建动态自定义脚本,主要用于定义和扩展hap(hsp、har)的构建流程
   └─ 其他配置文件
└─ module2
└─ hvigor目录
   └─ hvigor-config.json5    // 构建引擎的配置文件,主要用于定义开发态版本号、依赖插件的版本以及Hvigor相关能力的配置等
└─ build-profile.json5    // 工程级别的构建静态配置文件,主要用于定义整个项目的模块信息、应用信息、app的构建行为等
└─ hvigorfile.ts    // 工程级别的构建动态自定义脚本,主要用于定义和扩展app的构建流程
└─ 其他配置文件

其他配置文件:

  • oh-package.json5:应用的三方包依赖配置文件
  • local.properties: 应用本地环境配置文件
  • obfuscation-rules.txt: 应用模块的混淆规则配置文件
  • consumer-rules.txt: 库模块默认导出的混淆规则文件,会打包到HAR包中;仅支持HAR模块

工程下的build-profile.json5文件中模块配置示例:

{
  "modules": [
    {
      "name": "module1", // 模块的名称。该名称需与module.json5文件中的module.name保持一致。在FA模型中,对应的文件为config.json。
      "srcPath": "./module1" // 模块的源码路径,为模块根目录相对工程根目录的相对路径
    },
    {
      "name": "module2",
      "srcPath": "./module2"
    }
  ]
}

动态配置模块

Hvigor支持在hvigorconfig.ts脚本中动态添加或排除某个模块。

分模块编译

Hvigor支持分模块编译和打包。您可以通过以下两种方式进行分模块构建:

  • 在DevEco Studio中,选中需构建的模块目录后,点击Build菜单栏下的"Make module 'module1'",其中"module1"根据具体工程模块名称显示;
  • 在DevEco Studio的Terminal中,指定模块进行编译。比如模块类型为entry,目标产物target为default,构建HAP模块,可执行以下命令:
hvigorw --mode module -p product=default -p module=module1@default assembleHap

<think>我们正在讨论鸿蒙系统HarmonyOS)中的生命周期回调,特别是`onWindowStageWillCreate`方法。根据提供的引用内容,我们知道`AbilityLifecycleCallback`接口定义了多个回调方法,包括`onWindowStageInactive`和`onAbilityWillSaveState`等。用户询问的是`onWindowStageWillCreate`的使用方法和实现原理。 首先,我们需要明确`onWindowStageWillCreate`是`AbilityLifecycleCallback`接口中的一个回调方法。根据鸿蒙系统的文档,这个回调会在WindowStage即将创建时被调用。###使用方法1. **定义回调类**:创建一个类实现`AbilityLifecycleCallback`接口,并重写`onWindowStageWillCreate`方法。2.**注册回调**:在UIAbility的`onCreate`阶段,使用`AbilityContext`的`registerAbilityLifecycleCallback`方法注册这个回调类的实例。3.**在回调中操作**:在`onWindowStageWillCreate`方法中,可以执行一些在WindowStage创建之前需要完成的初始化工作。###示例代码以下是一个简单的示例,展示如何使用`onWindowStageWillCreate`回调: ```typescriptimportAbilityLifecycleCallbackfrom '@ohos.app.ability.abilityLifecycleCallback'; importUIAbilityfrom '@ohos.app.ability.UIAbility';import AbilityConstant from'@ohos.app.ability.AbilityConstant';import windowfrom'@ohos.window';//1.定义回调类class MyAbilityLifecycleCallbackimplements AbilityLifecycleCallback {onWindowStageWillCreate(ability: UIAbility,windowStage: window.WindowStage){//在这里可以执行一些初始化操作,例如设置窗口属性console.log('onWindowStageWillCreate: WindowStage willbe createdforability:' +ability.abilityInfo.name);//例如,设置窗口模式windowStage.getMainWindow().then((window)=> {window.setWindowMode(window.WindowMode.FULLSCREEN).catch((err) =>{console.error('Failedto setwindow mode. Cause: '+ JSON.stringify(err));});});} }export defaultclass EntryAbility extendsUIAbility{onCreate(want:Want,launchParam: AbilityConstant.LaunchParam){console.log('onCreate');//2.注册回调letcallback= newMyAbilityLifecycleCallback();this.context.registerAbilityLifecycleCallback(callback);} }``` ###实现原理1.**生命周期管理**:鸿蒙系统的Ability生命周期由系统管理,当系统准备为Ability创建WindowStage时,会触发`onWindowStageWillCreate`回调。2.**回调机制**:通过注册`AbilityLifecycleCallback`接口的实现,开发者可以在特定的生命周期阶段插入自定义逻辑。3.**窗口操作**:在`onWindowStageWillCreate`回调中,我们可以获取到即将创建的WindowStage对象,从而可以对其进行配置,例如设置窗口模式、背景色等。注意,此时WindowStage尚未创建完成,所以我们可以进行一些前置的配置。###注意事项-在`onWindowStageWillCreate`中,WindowStage对象已经创建但还未完成初始化,因此可以对其进行一些设置,但要注意不要进行耗时的操作,以免影响窗口的创建速度。 -注册的回调需要在整个Ability生命周期中管理,如果不再需要,应该使用`unregisterAbilityLifecycleCallback`方法注销,以避免内存泄漏。###引用说明根据提供的引用[^1]和[^2],我们了解到`AbilityLifecycleCallback`接口中还有其他回调方法,如`onWindowStageInactive`和`onAbilityWillSaveState`等。这些回调方法分别在不同的生命周期阶段被调用,开发者可以根据需要实现这些方法。[^1]:鸿蒙5.0开发进阶:Stage模型-@ohos.app.ability.abilityLifecycleCallback (AbilityLifecycleCallback)[^2]:鸿蒙API13开发【@ohos.app.ability.abilityLifecycleCallback】Stage模型能力的接口§§相关问题§§1.鸿蒙系统中`AbilityLifecycleCallback`还有哪些其他的回调方法? 2.如何注销已经注册的`AbilityLifecycleCallback`回调?3.在`onWindowStageWillCreate`回调中可以进行哪些窗口设置?4.鸿蒙系统的Stage模型和FA模型在生命周期管理上有什么区别?</think>### 鸿蒙系统 onWindowStageWillCreate 生命周期回调详解 #### 一、基本概念 `onWindowStageWillCreate` 是鸿蒙系统 Stage 模型中 `AbilityLifecycleCallback` 接口的关键回调方法,在 UIAbility 的 WindowStage 即将创建时触发(在 `onWindowStageCreate` 之前)。它允许开发者在窗口舞台创建前进行初始化操作,属于 Ability 生命周期中的 **预创建阶段**[^1]。 #### 二、使用方法 1. **实现回调接口** ```typescript import AbilityLifecycleCallback from '@ohos.app.ability.abilityLifecycleCallback' import UIAbility from '@ohos.app.ability.UIAbility' class MyLifecycleCallback implements AbilityLifecycleCallback { onWindowStageWillCreate(ability: UIAbility, windowStage: window.WindowStage) { // 在此进行窗口创建前的初始化 console.log('WindowStage即将创建,Ability名称: ' + ability.abilityInfo.name) } } ``` 2. **注册回调到 UIAbility** ```typescript export default class EntryAbility extends UIAbility { onCreate() { const callback = new MyLifecycleCallback() // 注册生命周期回调 this.context.registerAbilityLifecycleCallback(callback) } } ``` 3. **典型应用场景** - ✅ 窗口属性预配置(如设置背景色) - ✅ 加载窗口创建所需的资源 - ✅ 初始化窗口状态管理模块 - ❌ 避免在此执行耗时操作(影响窗口创建速度) #### 三、实现原理 1. **生命周期触发时序** ```mermaid graph LR A[UIAbility onCreate] --> B[onWindowStageWillCreate] B --> C[创建WindowStage实例] C --> D[onWindowStageCreate] ``` 2. **框架层交互流程**: - 当系统准备为 Ability 创建窗口时,**AbilityManagerService** 检查注册的回调 - 触发 `onWindowStageWillCreate` 并传入两个关键参数: - `ability`: 当前 UIAbility 实例 - `windowStage`: 即将创建的窗口舞台对象 - 开发者可通过 `windowStage` 预配置窗口属性(但此时窗口尚未渲染) 3. **设计优势**: - **解耦性**:将初始化逻辑与 Ability 主体分离 - **可扩展性**:支持多个独立回调模块 - **安全性**:在窗口创建前完成关键配置,避免渲染后修改导致的闪烁 #### 四、最佳实践 ```typescript onWindowStageWillCreate(ability: UIAbility, windowStage: window.WindowStage) { // 1. 设置窗口属性 windowStage.loadContent('pages/Index', (err) => { if (err) console.error('加载内容失败') }) // 2. 配置窗口参数 windowStage.getMainWindow().then((win) => { win.setWindowBackgroundColor('#F1F3F5') }) // 3. 初始化状态监听 ability.on('abilityState', (state) => { console.log('Ability状态变化: ' + state) }) } ``` #### 五、注意事项 1. **执行限制**: - ⏱️ 需在 50ms 内完成(避免阻塞主线程) - 🚫 禁止直接操作 UI 组件(此时窗口树未构建) 2. **错误处理**: ```typescript try { // 初始化操作... } catch (err) { console.error('初始化失败: ' + JSON.stringify(err)) // 可触发异常恢复机制 } ``` 3. **多窗口场景**: - 每个窗口舞台创建都会独立触发回调 - 通过 `windowStage.id` 区分不同窗口 [^1]: 鸿蒙5.0开发进阶:Stage模型-@ohos.app.ability.abilityLifecycleCallback [^2]: 鸿蒙API13开发文档:@ohos.app.ability.abilityLifecycleCallback
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值