Skip to main content

moregeek program

#私藏项目实操分享# 一个常见鸿蒙应用的基础知识-多极客编程

什么是鸿蒙应用

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”,简称APP。
在 HarmonyOS 上运行的应用,有两种形态:

  • 传统方式的需要安装的应用。
  • 提供特定功能,免安装的应用(即原子化服务)。

鸿蒙应用的形式

鸿蒙应用软件包以 APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability Package)以及描述每个 HAP 属性的 ​​pack.info​​​ 组成。HAP 是 [Ability]的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。
类似于常见的 Web 应用,HAP 也由代码、资源、第三方库以及应用配置文件组成。
HAP 又可以分为 entry 和 feature 两种模块类型:

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

#私藏项目实操分享# 一个常见鸿蒙应用的基础知识_资源文件

Ability

Ability(能力,可以是界面能力,也可以是服务能力),是应用软件的基础单位。应用所具备的能力的抽象,一个应用可以具备多种能力,即可以包含多个 Ability,鸿蒙HarmonyOS支持应用以Ability为单位进行部署。

库文件

库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。

资源文件

资源文件很好理解:字符串、图片、图标、音频等。位置存放于resources目录下。

resources
|---base // 默认存在的目录
| |---element
| | |---string.json
| |---media
| | |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建
| |---element
| | |---string.json
| |---media
| | |---icon.png
|---rawfile // 默认存在的目录

详情看​​资源文件的分类与使用​

配置文件

其他开发中,配置文件格式可以是 XML 或 JSON 格式,鸿蒙应用也是采用 JSON 格式,配置文件为 ​​config.json​​​ 。 配置文件是应用的 Ability 信息,用于声明应用的 Ability ,以及应用所需权限等信息。
应用的每个 HAP 的根目录下都存在一个“config.json”配置文件,主要涵盖以下三个方面:

  • 应用的全局配置信息,包含应用的包名、生产厂商、版本号等基本信息。
  • 应用在具体设备上的配置信息。
  • HAP 包的配置信息,包含每个 Ability 必须定义的基本属性(如包名、类名、类型以及 Ability 提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。

这是上一篇文章中 HelloWorld 程序中的 ​​config.json​​ 文件:

{
"app": {
"bundleName": "com.example.helloworld",
"vendor": "example",
"version": {
"code": 1000000,
"name": "1.0.0"
}
},
"deviceConfig": {},
"module": {
"package": "com.example.helloworld",
"name": ".MyApplication",
"mainAbility": "com.example.helloworld.MainAbility",
"deviceType": [
"phone"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "entry",
"moduleType": "entry",
"installationFree": false
},
"abilities": [
{
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
],
"orientation": "unspecified",
"name": "com.example.helloworld.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"label": "$string:entry_MainAbility",
"type": "page",
"launchType": "standard"
}
]
}
}

配置文件的解释建议看:​​配置文件的元素​

pack.info

描述应用软件包中每个 HAP 的属性,由 IDE 编译生成,应用市场根据该文件进行拆包和 HAP 的分类存储。HAP 的具体属性包括:

  • delivery-with-install: 表示该 HAP 是否支持随应用安装。“true” 表示支持随应用安装;“false” 表示不支持随应用安装。
  • name:HAP 文件名。
  • module-type:模块类型,entry 或 feature 。
  • device-type:表示支持该 HA P运行的设备类型。

HAR

HAR(HarmonyOS Ability Resources)可以提供构建应用所需的所有内容,包括源代码、资源文件和 ​​config.json​​ 文件。HAR 不同于 HAP ,HAR 不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

HelloWorld 项目整体结构

  1. 打开 HelloWorld 项目后,在 Project 左边栏中预览项目结构如图:

#私藏项目实操分享# 一个常见鸿蒙应用的基础知识_json_02

我们能看到 entry 目录,这个目录其实就是一个应用的 HAP 包,类型为 entry 类型。

  1. 接着我们在 src/main/java 下能看到以包名命名的文件夹:这里存放的就是我们的 Java 代码。此处的代码可以用来创建布局、动态调整布局以及为交互提供支撑服务。
  2. 和 java 文件夹同级别的 resources 目录下分布着应用资源,该目录的 base 目录下,按资源分类又有着多个文件夹资源。
  3. element: 表示元素资源,放着 json 格式的文件,主要用来表示字符串、颜色值、布尔值,可以被其他地方引用。
  4. graphic:可绘制资源,用 xml 文件来表示,例如项目中的圆角按钮、按钮颜色。
  5. layout:布局资源,例如页面的布局资源
  6. media:媒体资源,包括图片、音视频等非文本格式的文件
  7. ​config.json​​:配置文件

#私藏项目实操分享# 一个常见鸿蒙应用的基础知识_json_03

与 main 目录平级的 test 目录是测试目录,可以用于对自己写的功能进行单元测试,确保代码的正确性。
与 src 平级的 libs 目录用来存储或引用第三方包,例如 jar 包、so 包等。
和 entry 目录平级的 build 目录则用来存放最终编译后的包,也就是 HAP 包。

总结

本文通过上文的 HelloWorld 应用简单解释了一个鸿蒙应用包含的文件、项目结构、以及各个模块的功能,这里只是简单列出部分知识,更多内容读者建议参考官方文档学习和了解。
只有对一个项目结构熟悉了,才能知道作为开发者代码该写在哪个位置,不是吗?
赶紧学起来吧。下一篇文章见!

©著作权归作者所有:来自51CTO博客作者宇宙之一粟的原创作品,请联系作者获取转载授权,否则将追究法律责任
#私藏项目实操分享# 一个常见鸿蒙应用的基础知识
https://blog.51cto.com/yuzhou1su/5011790

#yyds干货盘点#Bazel与Gradle工具差异-多极客编程

​Bazel与Gradle工具差异之前介绍Bazel文章中有同学闻到Bazel与Gradle工具的差异。这篇文章我们解答这个问题。来自Bazel员工的说法Bazel和Gradle强调构建体验的不同方面。在某种程度上,它们的侧重点是互斥的——Gradle对灵活性和非突出性的要求对它的构建结构进行了限制,而Bazel对可靠性和性能的要求产生了强制不可协商的限制。Gradle重视的原则和Bazel是一样

【Flutter 专题】66 图解基本约束 Box (一) #yyds干货盘点#-多极客编程

      小菜在学习过程中,为了调整或适配 Widget 大小时,会设置 Widget 或嵌套使用一些约束 Widget;小菜针对性学习一下这一系列的约束 Box; SizedBox 源码分析 class SizedBox extends SingleChildRenderObjectWidget { // 创建固定大小的约束Box const SizedBox({ Key key, t

开源demo| 你画我猜——让你的生活更有趣-多极客编程

随着互联网的发展,人们的很多娱乐活动从线下转为线上,随时随地地打开手机或者电脑就能和朋友们进行社交娱乐活动。在众多线上娱乐活动中,你画我猜是一款非常受欢迎的益智休闲类小游戏,拥有简单的游戏方式、可以让各年龄段的用户轻松上手、充分的调动玩家的思维创造能力。 现在anyRTC用实时音视频功能结合白板功能开发了一款你画我猜的开源demo,供广大用户来体验。 你画我猜demo主要功能 1.聊天室 进入你画

#yyds干货盘点#编译器及编译工具之编译工具-多极客编程

编译器及编译工具之编译工具上篇介绍了编译器,如果直接使用编译器管理我们的大中型项目,会相当痛苦而且根本无法维护。为了提效,于是产生了各种编译工具。所以今天介绍移动端开发对应的的编译工具。Apache Ant还记得那个用eclipse开发Android的年代吗?eclipse就是基于Ant工具来构建Android项目的。Apache Ant 是由 Java 语言开发的工具,由 Apache 软件基金

【Flutter 专题】67 图解基本约束 Box (二) #yyds干货盘点#-多极客编程

      小菜继续学习约束 Box 的各类应用; UnconstrainedBox 源码分析 class UnconstrainedBox extends SingleChildRenderObjectWidget { const UnconstrainedBox({ Key key, Widget child, this.textDire

#yyds干货盘点# Kotlin与Java互调的那些事-多极客编程

Kt调用-Java参数非null的处理 @NotNull Java class TestJava { public void toNotNull(@NotNull String title) {} public void toNull(String title){} } Kotlin中调用 Kt调用- Java中使用kt关键字声明的变量和方法 kotlin中调用java方法,

技术实践第四期|解读移动开发者日常-性能监控平台应用-多极客编程

作者:友盟+技术专家 谦翔​一、概述应用性能监控平台是用来帮助客户提升应用性能质量和稳定性的重要环节,本人作为一名移动端开发者有着丰富的使用和运维经验,希望通过本文分享过往的心得和使用经验,让我参与开发的​​U-APM​​这款产品中,作为借鉴可以在中长期规划中帮助更多的开发者。(以下内容仅作为稳定性监控平台这类平台的使用经验和心得,文中提及平台仅供参考)二、产品受众1. 了解他们应用性能监控平台的

移动测试之AutoCompleteTextView、ToggleButton-多极客编程

AutoCompleteTextView:自动完成文本框(一)、介绍:自动完成文本框,用于实现用户输入一定字符后,显示一个下拉式菜单,让用户从中选择,当用户选择后,就会自动填写该文本框。 类结构:java.lang.Object   ↳  android.view.View      ↳  android.widget.TextView         ↳  android.widget.Edit

移动测试之ExpandableListView-多极客编程

一、ExpandableListView:(一)、类结构:java.lang.Object   ↳  android.view.View      ↳  android.view.ViewGroup         ↳  android.widget.AdapterView<T extends android.widget.Adapter>            ↳  android.

百度程序员开发避坑指南(移动端篇)-多极客编程

01 NSTimer造成的内存泄漏问题? 1.1 什么是内存泄漏? 一个对象在引用计数变为0时,系统会回收内存。如果一个本应该被回收的内存,没有被回收(引用计数>0),那么就会造成内存泄漏。 以下代码将造成内存泄漏: @interface ViewController () @property (nonatomic, strong) NSTimer *timer; @end @implem

自动化测试之路 —— appium使用教程_austin的博客-多极客编程

@TOC 1.目的   当今社会,人们的生活几乎已经无法离开各种的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产品价值高等特性决定了今后的主导地位。   那么在日常的测试活动中,移动应用的质量保障就成为了各个测试团队的主要课题,面对高速迭代的功能、日益缩短的项目周期、逐渐庞大的人力与资源投入,以上的

自动化测试之路 —— appium元素定位_austin的博客-多极客编程

@TOC 1.目的   当今社会,人们的生活几乎已经无法离开形形色色的APP了,它提供给我们的便利与服务意义远远超出了其本身的软件价值。作为测试来说移动应用也早已是各大互联网公司的拳头产品,其本身的开发周期短,附属产品价值高等特性决定了今后的主导地位。   那么在日常的测试活动中,移动应用的质量保障就成为了各个测试团队的主要课题,面对高速迭代的功能、日益缩短的项目周期、逐渐庞大的人力与资源投入,以