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

刚创建的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”设备的资源匹配。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐