鸿蒙开发:基于最新API,如何实现组件化运行

简介: 手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!

前言


本项目API>=13


在《鸿蒙开发:资讯项目实战之项目初始化搭建》一文中,遗留了一个问题,那就是,如何实现各个模块独立运行,其实关于组件化各模块独立运行,之前也写过三篇文章,分别探讨了运行包和共享包区别,nodeJs脚本实现组件化和hvigor插件形式进行组件化,奈何时间过去已久,之前的方式已不在通用,因为新的API更新迭代太快了,不知不觉API19已经到来,今年以来,已经更新了6个版本了,官方的速度如火箭一般,实现追不上啊!



因为Api发生了变化,新的IDE中,创建的项目结构,也潜移默化的发生了变化,那么之前开发的插件也好,脚本也好,也是无法继续使用的,没办法,只能改造升级了。


还是按照以往的顺序,我们从基本的运行包和共享包差异性分析,然后在着手利用脚本或插件帮我们快速实现组件化运行包切换,本篇文章,重点概述手动实现普通模块(共享包)运行。


运行包和共享包


什么是运行包?什么是共享包?拿我们这个资讯项目来说,entry模块就是运行包,我们直接可以运行到设备上并正确展示,其他模块就是共享包,无法单独运行到设备上正确展示;一句话解读:能独立运行至设备上的模块,并且能够正确展示,就是运行包。


这里有一点需要清晰,那就是,运行包一个项目中只能存在一个,即便后续,我们把其他的模块修改为了可运行,也要把原有的运行包修改为不可运行。



如何把一个共享包修改为运行包,前提需要对比两者的差异,根据不同之处,才能方便后续修改。


两者差异性


我们主要对比主模块entry和一个普通的共享包即可,新的API中,和之前的差异性不是很大,不同之处基本上一样,目前有以下几处不同,这里我们只分析动态共享包,静态共享包其实也是类似的。


1、hvigorfile.ts不同


主模块(entry,可运行)

import { hapTasks } from '@ohos/hvigor-ohos-plugin';
export default {
    system: hapTasks,  /* Built-in plugin of Hvigor. It cannot be modified. */
    plugins:[]         /* Custom plugin to extend the functionality of Hvigor. */
}


普通模块(共享包,不可运行)

import { hspTasks } from '@ohos/hvigor-ohos-plugin';
export default {
    system: hspTasks,  /* Built-in plugin of Hvigor. It cannot be modified. */
    plugins:[]         /* Custom plugin to extend the functionality of Hvigor. */
}


以上的不同为:主模块中用的是hapTasks,普通模块中用的是hspTasks。


2、module.json5不同


主模块(entry,可运行)


{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:EntryAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:EntryAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ]
      }
    ],
    "extensionAbilities": [
      {
        "name": "EntryBackupAbility",
        "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets",
        "type": "backup",
        "exported": false,
        "metadata": [
          {
            "name": "ohos.extension.backup",
            "resource": "$profile:backup_config"
          }
        ],
      }
    ]
  }
}


普通模块(共享包,不可运行)


{
  "module": {
    "name": "home",
    "type": "shared",
    "description": "$string:shared_desc",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "pages": "$profile:main_pages"
  }
}


module.json5中差异性比较大,不仅仅是type类型的不同,一个共享包中的配置属性相对于主模块而言,缺失了很多的属性,比如abilities,extensionAbilities等。


3、缺少ability


其实在module.json5中我们已经看出了这个差异,主模块中是多了两个Ability,一个是EntryAbility,一个是EntryBackupAbility,虽然说默认生成的自带EntryBackupAbility这个用于应用接入数据备份恢复的类,但是我们删除,也不会影响到我们的应用开发。


4、缺少资源


共享包和运行包,在module.json5差异中,还有一些资源上的缺少,如icon图标,如背景颜色等等。



实现共享包运行


让一个普通模块实现运行,我们只需要按照以上的差异进行修改,便可以达到组件的单独运行效果,更改完有两点需要注意,第一点,清除缓存,清除之前的配置信息,第二点,设置启动Ability。



除了自身的模块需要更改,也需要把之前的运行模块修改为共享模块,否则也是无法单独运行,也就是遵循,共享包改为运行包,运行包改为共享包

主要改动就是互相调换代码,弥补资源信息,比如共享包改动如下:


hvigorfile.ts里改为和主模块一样的:


module.json5中也是改为和主模块一样的,并且需要两个Ability。



然后就是复制需要的资源信息:



同样的,主模块也是按照共享包里的配置进行更改,两个都互相改完之后,单独的模块就可以独立运行了,比如资讯项目中的home模块,改为之后,点击运行后,效果如下:


相关总结

组件化运行目的是为了减少编译时间,提高运行测试效率,毕竟一个模块的运行时间肯定远远小于整个项目的运行时间。


本篇文章,主要分析了运行包和共享包之间的差异,了解了差异点,我们便可以手动实现共享包的运行。


手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!


本文标签:鸿蒙新闻资讯类应用

相关文章
|
22天前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
13天前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
22天前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
95 0
|
22天前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
199 0
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
22天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
63 0
|
22天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
157 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
22天前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段三
本文介绍了UI开发中的样式复用与组件构建技术,涵盖@Extend、@Styles和@Builder的使用方法,并通过Swiper轮播、Scroll滚动、Tabs导航等常用组件实现典型界面效果,结合生肖抽卡、小米轮播、回顶按钮等案例,展示实际应用技巧。
80 0
|
22天前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
本文介绍鸿蒙应用界面开发中的弹性布局(Flex)、绝对定位、层叠布局及ArkTS语法进阶,涵盖字符串拼接、类型转换、数组操作、条件与循环语句,并结合B站视频卡、支付宝首页等案例,深入讲解点击事件、状态管理与界面交互功能。
90 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
|
11天前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
117 0
|
4月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。