作者简介:一位喜欢写作,计科专业大二菜鸟
个人主页:starry陆离
首发日期:2022年7月15日星期五
上期文章:『HarmonyOS』工程的创建与虚拟机的使用
温馨提示:全文3560词,阅读大约需要9分钟
订阅专栏:『HarmonyOS』
每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)
如果文章有帮到你的话记得点赞+收藏支持一下哦
App就是应用,指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。
在HarmonyOS上运行的应用,有两种形态:
原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。
例如:某传统方式的需要安装的购物应用A,在按照原子化服务理念调整设计后,成为由“商品浏览”“购物车”“支付”等多个便捷服务组成的、可以免安装的购物原子化服务A*。
Android应用以 APK(Android Application package形式发布,当我们需要在Android手机上安装一个App时,首先需要找到这个App对应的APK安装包,执行该APK安装包就能安装App了。
HarmonyOS应用/服务发布形态为APP Pack(Application Package,简称APP),它是由一个或多个HAP(HarmonyOS Ability Package)包以及描述APP Pack属性的pack.info文件组成。
一个HAP在工程目录中对应一个Module,它是由代码、资源、第三方库及应用/服务配置文件组成,可以分为Entry和Feature两种类型,具体如下:
可以认为entry是主模块,而feature是配置模块
HAP是Ability的部署包,HarmonyOS应用/服务代码围绕Ability组件展开,它是由一个或多个Ability组成。Ability分为两种类型:FA(Feature Ability,中文名称:元程序)和PA(Particle Ability,中文名称:元服务)。FA/PA是应用/服务的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。
我们在应用的build目录下可以找到名为entry-debug-rich-unsigned.hap或entry-debug-rich-signed.hap的文件,如下图所示,这些.hap文件就是HarmonyOS的应用软件包。
DevEco Studio工程目录结构提供工程视图和HarmonyOS视图。工程创建或打开,默认显示工程视图,如果要切换到HarmonyOS视图,在左上角点击Project > Ohos进行切换。
左边是工程视图,右边是HarmonyOS视图
在代码层次,我们可以看到下图所示的MyApplication,这是整个应用的入口。
从代码可以看到,MyApplication继承自AbilityPackage
,而AbilityPackage
是用来初始化每个HAP的基类。
库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录,如下图所示
描述应用软件包中每个HAP的属性,由IDE编译生成,应用市场根据该文件进行拆包和HAP的分类存储。HAP的具体属性包括:
delivery-with-install: 表示该HAP是否支持随应用安装。“true”表示支持随应用安装;“false”表示不支持随应用安装。
name:HAP文件名。
module-type:模块类型,entry或feature。
device-type:表示支持该HAP运行的设备类型。
HarmonyOS应用的每个HAP的根目录下都存在一个“config.json”配置文件,如下图所示:
config.json文件内容主要涵盖以下三个方面:
JSON
1.JSON是什么?
2.JSON语法
JSON语法是JavaScript对象表示语法的子集:数据在名称/值对、数据由逗号分隔、大括号 {} 保存对象、中括号[]保存数组,数组可以包含多个对象。具体来说就是:
key : value
,比如:"name" : "starry陆离"
。""
包围;而JSON值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在中括号中)、对象(在大括号中)、null。"age":20
。{"name":"starry陆离", "gender":"男", age:20 }
。"students":[ {"name":"zhangsan"}, {"name":"lisi"}]
"married":true
{ "runoob":null }
DevEco Studio提供了两种编辑“config.json”文件的方式。在“config.json”的编辑窗口中,可在右上角切换代码编辑视图或可视化编辑视图。
配置文件的内部结构
config.json由app、deviceConfig和module三个部分组成,缺一不可。具体如下所示:
app对象包含应用的全局配置信息,内部结构说明如下:
bundleName:表示应用的包名,用于标识应用的唯一性。包名是由字母、数字、下划线(_)和点号(.)组成的字符串,必须以字母开头。支持的字符串长度为7~127字节。包名通常采用反域名形式表示(例如,“com.example.myapplication”)。建议第一级为域名后缀“com”,第二级为厂商/个人名,第三级为应用名,也可以采用多级。
vendor:表示对应用开发厂商的描述。字符串长度不超过255字节。该值可缺省,缺省值为空。
version:表示应用的版本信息。
smartWindowSize:该标签用于在悬浮窗场景下表示应用的模拟窗口的尺寸。配置格式为“正整数*正整数”,单位为vp。正整数 取值范围为[200,2000]。
smartWindowDeviceType:表示应用可在哪些设备上使用模拟窗口打开。取值为:智能手机phone、平板tablet、智慧屏tv。
targetBundleList:表示允许以免安装方式拉起的其他HarmonyOS应用,列表取值为每个HarmonyOS应用的bundleName,多个 bundleName之间用英文“,”区分,最多配置5个bundleName。如果被拉起的应用不支持免安装方式,则拉起失败。
deviceConfig包含在具体设备上的应用配置信息,可以包含default、phone、tablet、tv、car、wearable、liteWearable和smartVision等属性。default标签内的配置是适用于所有设备通用,其他设备类型如果有特殊的需求,则需要在该设备类型的标签下进行配置。
module对象包含HAP包的配置信息,内部结构说明如下:
resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录。
base目录与限定词目录
组织形式
按照两级目录形式来组织,目录命名必须符合规范,以便根据设备状态去匹配相应目录下的资源文件。
一级子目录为base目录和限定词目录:
二级子目录为资源目录,用于存放字符串、颜色、布尔值等基础元素以及媒体、动画、布局等资源文件。
编译方式
目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。
引用方式
通过指定资源类型(type)和资源名称(name)来引用,
rawfile目录
组织形式
支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。
编译方式
目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。
引用方式
通过指定文件路径和文件名来引用。
资源类型(type)和资源名称(name)来引用,
rawfile目录
组织形式
支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。
编译方式
目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。
引用方式
通过指定文件路径和文件名来引用。
每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)