鸿蒙 鸿蒙 OS 浅出学习笔记(二)

狂天 · June 16, 2021 · Last by 狂天 replied at June 16, 2021 · 2713 hits

五、系统安全
前面说了这么多分布式,用户做的事情在多个设备上这么花式切换,安全问题怎么保证呢?
HarmonyOS 的安全标准:“正确的人,通过正确的设备,正确地使用数据。”

1.正确的人如何确定?
零信任:每次跨设备访问,都要进行身份认证。

协同认证:让高安全等级的设备协助低安全的等级的设备完成安全认证,比如网页可认证 IDE。

2.正确的设备
安全启动:保证运行的应用是完整并未经篡改的。
设备证书认证:安全设备可预置证书。

3.正确的使用数据
数据生成:数据从一生成就开始为其设置保护等级,存储使用
传输都受保护等级管理。
数据使用:敏感数据只能在可信任环境中使用。
数据传输:多设备是可信并且建立的信任关系并验证后,才可
进行数据传输。

六、鸿蒙应用基础概念
应用发布形式:
以 APP Pack 的形式发布,一个 Pack 由多个 HAP(Ability Package)和描述每个 HAP 属性的 pack.info 组成。
一个 HAP 由代码,资源,第三方库和配置文件组成。

模块类型:
entry:主模块,应用中有且仅有一个,可单独运行。
feature:动态特性模块,模块中包含 ablity 才可独立运行。

HAP 包中的文件目录类型:
库文件:lib 目录下。
资源文件:resource 目录下。
配置文件:config.json,声明应用的全局配置信息,版本号,厂商等,具体设备的配置信息和 ability 属性,以及所需权限。
pack.info:包含 HAP 属性说明信息。

七、配置文件详解:
前面说了配置文件 config.json 里一共包含三部分,这三部分缺一不可。

1.app:应用全局配置信息(字段含义我都写在了注释里)
示例:

"app": {
    //包名
    "bundleName": "com.huawei.hiworld.example", 
    //开发商
    "vendor": "huawei", 
    //版本
    "version": {
        //开发版号
        "code": 2,
        //对外版号
        "name": "2.0"
    }
    //HarmonyOS  API 版本
    "apiVersion": {
        //最小适用版本
        "compatible": 3, 
        //目标版本
        "target": 3
    }
}

2.deviceConfig:包含具体设备的应用配置信息
示例:

 "deviceConfig": {
    //default是所有设备通用的配置信息,如果要对特定的设//备设置需要写明,比如car是车机,tv是智慧屏
    "default": {
        //该应用的所有 Ability //都运行在这个进程中(手机不可用)
        "process": "com.huawei.hiworld.example", 
        //应用可未解锁直接启动(手机不可用)
        "directLaunch": false, 
        //是否可备份(手机不可用)
        "supportBackup": false,
        //网络配置
        "network": {
            //支持明文网络流量
            "usesCleartext": true, 
            //网络安全配置
            "securityConfig": {
                //网域范围
                "domainSettings": {
                    //网域范围是否可用明文流量
                    "cleartextPermitted": true, 
                    //域名配置
                    "domains": [
                        {   
                            //是否有子域名
                            "subDomains": true, 
                            //域名名称
                            "name": "example.ohos.com"
                        }
                    ]
                }
            }
        }
    }
}

3.moudle:HAP 包配置信息。
示例:

"module": {
    //HAP包名
    "package": "com.example.myapplication.entry", 
    //HAP类名
    "name": ".MyOHOSAbilityPackage", 
    //HAP描述(手机不可用)
    "description": "$string:description_application", 
    //支持运行模式(手机不可用)
    "supportedModes": [
        //驾驶(手机不可用)
        "drive"
    ], 
    ], 
    //ability的运行设备
    "deviceType": [
        "car"
    ], 
    //发布描述(手机不可用)
    "distro": {
        //当前HAP是否随应用安装
        "deliveryWithInstall": true, 
        //当前HAP名称
        "moduleName": "ohos_entry", 
        //当前HAP类型(entry或feature)
        "moduleType": "entry"
    }, 
    //模块内所有的ability
    "abilities":  [
    {
        //ability名称
        "name": ".MainAbility", 
        //ability描述
        "description":
        "$string:description_main_ability", 
        //ability图标索引
        "icon": "$media:hiworld.png", 
        //ability对用户显示的名称
        "label": "HiMusic", //表示ability的类别,page表示是FA,用于与用户交//互;service表示后台运行的任务;data表示提供数//据访问
        "type": "page", 
        //是否提供form能力
        "formEnabled": false, 
        //ability启动模式,standard:一般场景;singleton
        //:ability只能有一个实例,如全局唯一性的:来电 //界面
        "launchType": "standard", 
        //横竖屏显示,unspecified系统自动判断。
        "orientation": "unspecified", 
        //其他ability调用此ability时需要的权限
        "permissions": [
        ], 
        //是否可被其他ability调用
        "visible": false, 
        //能够接收的intent特征
        "skills": [
            {
                //能够接收intent的action值
                "actions": [
                    "action.system.home"
                ], 
                //能够接收intent的ability类别
                "entities": [
                    "entity.system.home"
                ]
            }
        ], 
        //Ability 关注的系统配置集合
        "configChanges": [
            "locale", 
            "layout", 
            "fontSize", 
            "orientation"
        ], 
        //Ability 是否支持在设备未解锁状态直接启动
        "directLaunch": false, 
        //应用或者 Ability 的进程名
        "process": "string", 
        //后台服务的类型
        "backgroundModes": [
            //数据传输
            "dataTransfer", 
            //音频输出
            "audioPlayback", 
            //音频输入
            "audioRecording", 
            //小窗口播放视频
            "pictureInPicture", 
            //视频电话
            "voip", 
            //定位、导航
            "location", 
            //蓝牙扫描
            "bluetoothInteraction", 
            //wifi扫描
            "wifiInteraction", 
            //录屏
            "screenFetch"
        ], 
    }
], 
    //应用的快捷方式
    "shortcuts": [
    {   
        //快捷方式的ID
        "shortcutId": "id",
        //快捷方式标签信息
        "label": "$string:shortcut",
        //intent信息集合
        "intents": [
            {
                //快捷方式所在包名
                "targetBundle": "com.huawei.hiworld.himusic",
                //快捷方式目标类名
                "targetClass": "com.huawei.hiworld.himusic.entry.MainAbility"
            }
        ]
    }
],
    //JS模块集合
    "js": [
        ...
    ], 
    //运行时向系统申请的权限
    "reqPermissions": [
        ...
    ], 
    //用户需要申请的权限
    "defPermissions": [
        ...
    ]
}
共收到 5 条回复 时间 点赞

鸿蒙的 app 不再是 apk 格式了,而是 hap 格式?

陈恒捷 回复

是的,目前兼容 apk,以后就说不准了

陈恒捷 回复

看了下官网,找到答案了:

HarmonyOS 的应用软件包以 APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability Package)以及描述每个 HAP 属性的 pack.info 组成。HAP 是 Ability 的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。

一个 HAP 是由代码、资源、第三方库及应用配置文件组成的模块包,可分为 entry 和 feature 两种模块类型,如图所示。

  • entry: 应用的主模块。一个 APP 中,对于同一设备类型必须有且只有一个 entry 类型的 HAP,可独立安装运行。
  • feature: 应用的动态特性模块。一个 APP 可以包含一个或多个 feature 类型的 HAP,也可以不含。只有包含 Ability 的 HAP 才能够独立运行。

HAP 是 Ability 的部署包,HarmonyOS 应用代码围绕 Ability 组件展开,它是由一个或多个 Ability 组成。Ability 分为两种类型:FA(Feature Ability)和 PA(Particle Ability)。FA/PA 是应用的基本组成单元,能够实现特定的业务功能。FA 有 UI 界面,而 PA 无 UI 界面。

狂天 #5 · June 16, 2021 Author
陈恒捷 回复

就是.app 吧,只不过可以选择里面的 HAP(有 ability 的)单独运行。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up