• 2. HarmonyOS工程结构


    HarmonyOS App工程结构

    在创建第一个Project并且成功运行之后,了解Project的结构就很有必要了。由于暂且开始Java开发是个人的主要方式,因此这里先了解Java工程项目结构。

    APP一些概念

    HarmonyOS应用的发布形态叫做APP Pack即Application Package。一个APP由一个或者多个Ability Package(HarmonyOS Ability Package)及描述app属性的pack.info文件组成。

    HAP

    HAP全称HarmonyOS Ability Package。一个HAP就是DevEco Studio中的一个Module,即由源码,资源,第三方库等组成。HAP可以分为Entry和Feature两种类型。

    • Entry:应用/服务的主模块,可以独立运行。一个APP结构中,可以包含一个或多个Entry类型的HAP。
    • Feature:应用/服务的动态特性模块。一个APP结构中可以包含一个或多个Feature的HAP,也可以不包含。

    了解以下两个概念

    Ability

    HAP是由若干个Ability组成。Ability是应用的重要组成部分,是应用所具备能力的抽象。Ability可以的分为两类,Feature Ability(FA,元程序)和Particle Ability(PA,元服务)。FA有UI界面,可以进行交互。PA没有UI界面。

    • FA代表了有界面的Ability,用于与用户进行交互。
    • PA表示了无界面的Ability,主要配合FA使用。可以提供后台计算服务,或者提供数据仓储保存等功能。

    了解Android开发概念同学肯定就比较熟悉了。FA类似Android中的Activity,有界面,可交互。PA类似Android中的Service,没有界面。

    AbilitySlice

    切片,是一个可视化Ability的基本组织单元。一个FA可以包含一个或多个AbilityAlice。每个AbilityAlice可以包含自己内部的交互及业务执行逻辑。

    了解Android开发概念同学肯定就比较熟悉了。AbilitySlice类似Android中的Fragment。

    工程结(Java开发)

    先来看下创建的工程结构。由于目前API 版本支持到7的Java工程,还不知道API 8是否会在结构上做出改变,因此这里的Java工程结构是API 4 ~ API 7 的结构。

    请添加图片描述

    • .gradle 目录是有IDE生成,因此在开发过程中不需要修改。
    • .idea 是IDE项目创建的工程目录及环境配置。
    • build目录是IDE编译过程的中间产物。
    • entry 默认启动模块(主模块),保存编写源码文件以及开发资源文件的目录。
      • libs:用于存放entry模块的依赖文件。
      • src>main>Java:用于存放Java源码。
      • src>main>Java>com>sanren1024>ohos>slice>MainAbilitySlice:承载单个页面的具体逻辑实现和界面UI。
      • src>main>Java>com>sanren1024>ohos>MyApplication:应用/服务的入口。
      • src>main>resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。
      • src > main > config.json:模块配置文件,主要包含HAP包的配置信息、应用在具体设备上的配置信息以及应用的全局配置信息。

    resources目录

    resources目录结构更加复杂,,如下结构所示。

    resources
    |---base  // 默认存在的目录
    |   |---element
    |   |   |---string.json
    |   |---graphic
    |   |   |---background_ability_main.xml
    |   |---layout
    |   |   |---ability_main.xml
    |   |---media
    |   |   |---icon.png
    |   |---profile
    |---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建   
    |   |---element
    |   |   |---string.json
    |   |---graphic
    |   |   |---background_ability_main.xml
    |   |---layout
    |   |   |---ability_main.xml
    |   |---media
    |   |   |---icon.png
    |   |---profile
    |---en  // 默认存在的目录
    |   |---element
    |   |   |---string.json
    |---rawfile  // 默认存在的目录
    |---zh  // 默认存在的目录
    |   |---element
    |   |   |---string.json
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    刚创建的Project resources目录下默认带有 baseenzhrawfile 目录。

    • base目录是项目创建就存在的目录。当app需要使用的resources资源目录中没有与之匹配的限定词目录存在时,会自动引用到该目录中的资源文件。
    • 限定词目录则需要开发者自己创建。

    base目录

    不论是base目录还是限定词目录,再目录下都可以创建资源目录,如 element,media,animation,layout,graphic,profile。

    • element 表示元素资源,所有数据都使用json格式。
      • boolean 布尔型,可以创建与类型一致的json文件名,可以定义在boolean.json中。
      • color 颜色,与之对应,定义在color.json文件中。
      • float 浮点型,定义在float.json文件中。
      • intarray 整型数组,定义在intarray.json文件中。
      • integer 整型,定义在integer.json文件中。
      • pattern 样式,定义在pattern.json文件中。
      • plural 复数形式,定义在plural.json文件中。
      • strarray 字符串数组,定义在strarray.json文件中。
      • string 字符串,定义在string.json文件中。
    • media 表示媒体资源,包括图片,音视频等非文本格式的文件。
    • animation 表示动画资源,采用xml文件格式。
    • layout 表示布局资源,采用xml文件格式。
    • graphic 表示可绘制资源,采用xml文件格式。
    • profile 表示其他类型文件,以原始文件形式保存。

    限定词目录

    限定词目录有组合的顺序:_移动国家码_移动网络码-语言_文字_国家或地区-横竖屏-设备类型-颜色模式-屏幕密度_

    限定词的连接方式:语言、文字、国家或地区之间采用下划线(_)连接,移动国家码和移动网络码之间也采用下划线(_)连接,除此之外的其他限定词之间均采用中划线(-)连接。例如:zh_Hant_CNzh_CN-car-ldpi

    • 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:移动国家码和移动网络码 > 区域(可选组合:语言、语言_文字、语言_国家或地区、语言_文字_国家或地区)> 横竖屏 > 设备类型 > 颜色模式 > 屏幕密度。

    • 如果限定词目录中包含移动国家码和移动网络码、语言、文字、横竖屏、设备类型、颜色模式限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参与“en_US”设备的资源匹配。

  • 相关阅读:
    import与require有什么区别(ES6模块和CommomJS模块的区别)
    Config 分布式配置中心
    嵌入式虹膜人脸多模态识别模组Max1/Max1+让创造由点及面
    7-29 删除字符串中的子串
    write_project_tcl
    工厂模式代码实例详解
    Part 11:Pandas的索引index所具备的四大性能
    实例分析MySQL四种隔离级别的区别
    AugMixDataset的一些示例
    字符串统计
  • 原文地址:https://blog.csdn.net/snowgeneral/article/details/126312952