构建鸿蒙5.0应用-项目布局篇(二)

打印 上一主题 下一主题

主题 1021|帖子 1021|积分 3063

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        初始化一个鸿蒙应用后,项目目次下一般会初始化一些目次,明白鸿蒙项目的目次布局对于我们来说非常重要,由于它涉及到代码和资源文件的组织管理。
        我们以这份代码为例,学习一下怎样组织鸿蒙应用的工程目次:基于鸿蒙OS NEXT开发的高仿微信APP
项目布局阐明 

  1. |——.hvigor          鸿蒙应用工程中负责存储构建过程中的缓存和报告的地方
  2. |——.idea            包含了IDE的项目管理配置
  3. |——AppScope         存放应用级别的静态资源,如应用图标、应用名称等字符串、多媒体文件等
  4.     |——app.json5    鸿蒙应用的全局配置文件,用于存放应用公共的配置信息。这个文件包含了应用的基本
  5.                      信息,如包名、版本、图标和名称等
  6. |——entry            HarmonyOS工程模块,存放主要应用代码,编译构建生成一个HAP包。
  7.     |——.preview     存放预览器在运行时生成的临时文件
  8.     |——src
  9.         |——main
  10.             |——ets
  11.                 |——component        应用组件存放位置
  12.                 |——entryability     存放应用的入口文件,是应用的启动点,定义了应用的入口能力(                                                                        
  13.                                      Ability),它是应用生命周期管理的核心,类似微信小程序开发中
  14.                                      的app.js
  15.                 |——pages            应用页面的存放位置
  16.                 |——utils            工具类的存放位置
  17.             |——resource             应用静态资源存放目录
  18.             |——module.json5        模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上
  19.                                     的配置信息以及应用/服务的全局配置信息
  20.         |——ohTest        单元测试、自动化测试等测试代码的存放位置
  21.     |——.gitignore
  22.     |——build-profile.json5
  23.     |——hvigorfile.ts
  24.     |——oh-package.json5
  25. |——hvigor           hvigor文件夹包含了Hvigor构建工具的配置文件和业务逻辑实现脚本
  26.     |——hvigor-config.json5        控制和自定义项目的构建过程,包括编译、打包等任务
  27. |——oh_modules       工程的依赖包存放目录,项目中引用到的第三方组件在打包后会被编译到应用包中
  28. |——.gitignore       设置工程需要忽略上传的目录或文件,例如oh_modules
  29. |——build-profile.json5     包含了整个工程的构建配置,如签名信息、编译SDK版本、兼容SDK版本、产品
  30.                             配置等。它定义了工程的签名配置、产品配置(如默认版、付费版、免费版
  31.                             等),以及模块信息和目标构建配置,告诉Hvigor如何构建你的应用或服务
  32. |——hvigorfile.ts           工程级编译构建任务脚本,允许开发者定义和配置项目的构建任务。这些任务   
  33.                             可能包括编译、打包、混淆、测试等各个阶段
  34. |——oh-package.json5        工程级依赖配置文件,用于记录引入包的配置信息,类似vue工程的               
  35.                             package.json
  36. |——oh-package-lock.json5   依赖包版本锁定文件
  37. |——README.md               工程的说明文件及项目备注一般写在这个文件内,以便开发人员阅读
  38. |——External Libraries      实际上并不属于工程目录,包含了构建应用过程中所需要的外部依赖,与                    
  39.                             oh_modules不同,这里面的代码不会被编译到应用包中,只是为了构建应用提
  40.                             供支持
复制代码
工程构建头脑

 整个工程的文件目次关系看起来应该是如下:

ohpm负责包资源管理,添加依靠到oh-package/oh-package-lock,依靠下载到oh_modules
oh_modules中的依靠为各业务模块提供依靠支持
hvigor把各应用模块打包成HAP应用,中间天生.hvigor缓存,方便下次打包使用
hvigorfile和build-profile为hvigor打包构建提供物料3及插件支持
hvigorw通过sync同步构建依靠到hvigor-config,为hvigorfile使用第三方依靠提供支持
 
AppScope/app.json5文件中的配置信息

 完备配置可以参考app.json5应用配置 
本项目中的配置包括:


  • bundleName:标识应用的包名,用于唯一标识应用。
  • vendor:标识应用的供应商或开发者。
  • versionCode:用于区分应用版本的数字,通常每次发布新版本时递增。
  • versionName:应用的版本号,通常以字符串情势表现,如"1.0.0"。
  • icon:对应于应用的显示图标,通常是一个资源引用。
  • label:应用的名称,用于在设备上显示给用户
module.json5完备配置

完备配置可参考module.json5配置阐明
本项目中的配置包括:
  1. {
  2.   "module": {
  3.     "name": "entry", //模块的名称,这里被设置为"entry"
  4.     "type": "entry", //模块的类型,这里被设置为"entry",表示这是一个入口模块,还支持feature|har|shared
  5.     "description": "$string:module_desc", //模块的描述,引用resource/base/elemment/sring.json的module_desc的值
  6.     "mainElement": "EntryAbility", //指定模块的主元素,这里被设置为"EntryAbility"
  7.     "deviceTypes": [ //定义了模块支持的设备类型
  8.       "phone",
  9.       "tablet"
  10.     ],
  11.     "requestPermissions": [ //定义了模块需要请求的权限,这里请求了互联网权限"ohos.permission.INTERNET",并提供了使用场景和理由
  12.       {
  13.         "name": "ohos.permission.INTERNET", //参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V5
  14.         "reason": "$string:net_permission_reason",
  15.         "usedScene": { //权限使用的场景,该字段用于应用上架校验。包括abilities和when两个子项。
  16. - abilities:使用权限的UIAbility或者ExtensionAbility组件的名称。
  17. - when:调用时机。
  18.           "abilities": [
  19.             "EntryAbility"
  20.           ],
  21.           "when": "inuse"
  22.         }
  23.       }
  24.     ],
  25.     "deliveryWithInstall": true, //模块是否随安装包一起交付,这里被设置为true
  26.     "installationFree": false, //表示模块是否支持免安装,这里被设置为false,表示需要安装
  27.     "pages": "$profile:main_pages", //定义了模块包含的页面,引用resource/base/profile/main_pages.json
  28.     "abilities": [ //定义了模块的能力(Ability),这里是"EntryAbility"
  29.       {
  30.         "name": "EntryAbility",
  31.         "srcEntry": "./ets/entryability/EntryAbility.ets", //Ability的源代码入口文件路径
  32.         "description": "$string:EntryAbility_desc", //Ability的描述
  33.         "icon": "$media:wechat_logo", //Ability的图标
  34.         "label": "$string:EntryAbility_label", //Ability的标签
  35.         "startWindowIcon": "$media:icon", //启动窗口的图标
  36.         "startWindowBackground": "$color:start_window_background", //启动窗口的背景色
  37.         "exported": true, //表示Ability是否被导出,这里被设置为true,表示Ability可以被其他应用或服务访问
  38.         "skills": [ //定义了Ability的技能集,这里包含了实体和动作,用于描述Ability的能力范围
  39.           {
  40.             "entities": [
  41.               "entity.system.home"
  42.             ],
  43.             "actions": [
  44.               "action.system.home"
  45.             ]
  46.           }
  47.         ]
  48.       }
  49.     ]
  50.   }
  51. }
复制代码
 oh-package-lock.json

鸿蒙应用似乎延续现有的工程架构头脑,依靠包管理接纳版本锁定文件,初学者可能不太明白为什么需要这个文件,觉得不是有oh-package.json做版本管理么?事实上oh-package中的依靠包接纳“^1.11.7”这种情势,意味着假如依靠包有版本更新,将允许安装新版本依靠,这就可能造成A开发者本地安装的是v1.11.7,B开发者本地安装的是v1.11.8,假如新版本的依靠包出现bug,则两位开发职员的实现效果会不同等,乃至出现生产题目。
版本情势阐明:参考深度解析package-lock.json作用


  • 指定版本:比如 1.2.2 ,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
  • 波浪号(tilde)+指定版本:比如 ~1.2.2 ,表现安装 1.2.x 的最新版本(不低于1.2.2),但是不安装 1.3.x,也就是说安装时不改变大版本号和次要版本号。
  • 插入号(caret)+指定版本:比如 ˆ1.2.2,表现安装 1.x.x 的最新版本(不低于 1.2.2),但是不安装 2.x.x,也就是说安装时不改变大版本号。需要留意的是,假如大版本号为 0,则插入号的行为与波浪号相同,这是由于此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
  • latest:安装最新版本。

明白hvigor配置文件职能

         hvigor是鸿蒙应用和服务的构建工具,初学时看到工程里面有build-profile.json5、hvigorfile.ts、hvigor/hvigor-config.json5、.hvigor这些配置文件不甚了解,容易犯浑,官方对这些配置文件的界说如下图所示:

 


  • build-profile.json5:指导hvigor要构建什么应用/服务、产品,应用包罗的模块信息、署名等
  • hvigor-config.json5:开发需要添加自界说插件依靠时,需要在此文件中声明依靠包及版本信息,声明依靠包后在hvigorfile.ts文件中才能引用,参官方hvigor-profile.json5配置文件阐明
  • hvigorfile.ts:构建过程需要使用自界说插件依靠时,在此文件导入插件并使用
  • build-profile.json5:指导hvigor要构建什么应用,参考 官方build-profile.json配置文件阐明
  • .hvigor:存放构建过程中的缓存、陈诉等信息
打个比方,build-profile相当于总指挥,告诉团队要做什么,hvigor-config相记载了团队需要什么样的人才,hvigorfile调用这些人才把活干起来,.hvigor则生存团队干出来的结果,方便下次继续使用。

为什么entry目次和工程根目次各自配了一套.gitignore、hivigorfile、build-profile、oh-package?

        许多朋友可能会纳闷为什么根目次配置了一套这些配置文件,entry目次又配置了一套,其实这是鸿蒙应用开发过程考虑多团队、管理多模块的大型复杂应用而计划的,例如支付宝有差别的应用模块包括支付、购物、出行等,差别的设备的入口也可能不一样,例如手机、可穿戴设备、平板、折叠屏等,因此需要支持差别功能模块的特定打包配置及依靠,初学者功力不敷后续可以深入了解鸿蒙模块化计划
参考资料

鸿蒙官方项目布局阐明-构建第一个ArkTS应用(Stage模子)鸿蒙官方项目布局阐明
官方app.json5配置文件阐明
官方module.json5配置文件阐明 
官方hvigor-profile.json5配置文件阐明
官方build-profile.json配置文件阐明
官方应用权限声明配置阐明 
 官方应用权限列表
 官方架构模块化计划
应用程序包底子知识-Stage模子应用程序包布局
   深度解析package-lock.json作用
hvigor构建配置-多模块管理 
hvigor编译构建生命周期

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表