鸿蒙HarmonyOS开发规范-完善中

代码规范

  1. 所有文件,包括自动生成的编译文件package.json都要格式化(IDE快捷键Ctrl+Alt+L);
  2. 函数命名,C++大驼峰,TS、JS小驼峰,函数命名注意动宾结构;
  3. 静态常量需使用全大写,文件目录使用全小写(不建议包含特殊字符如"-“和”_"等);
  4. 类名使用大驼峰,函数的参数、全局变量和局部变量都使用小驼峰,命名要规范化,见名知意;
  5. if语句后必须跟“{”,哪怕只有一行代码;
  6. 有break或return的条件,先break或return再走其他的逻辑;
  7. 条件判断,当一个分支达成条件时及时返回,不需要再走其他分支;
  8. 代码中避免出现魔鬼数字,需补上注释,或者用符合语义的名词常量代替,如下:
  // One minute has 60 seconds.let time = 60const ONE_MINUTE = 60let time = ONE_MINUTE
  1. 字符串拼接使用模板字符串;
  2. 组件使用,除了宽高属性可以在一行,其他的属性必须换行;
  3. TS、JS中关于是否添加";“的问题,风格要统一,建议添加”;";
  4. 字符串和图片资源等的使用,支持" r " 使用的,全部使用 " r"使用的,全部使用" r"使用的,全部使用"r"引用;
  5. 新增文件注意开源协议、版权检查;
  6. 截图要使用真机效果图;
  7. readme中使用“.”,不要用“、”,检查错别字;
  8. 异步方法中需要返回方法的返回值,不用声明变量,直接return,如下:
  return await this.mediaTest.getFileAssets(fetchOp)
  1. 方法中的参数需要类型声明;
  2. import 文件顺序,同类型放一起;
  3. string.json中description要写简要描述,zh下要用中文;
  4. TS、JS语言缩进为2格,C++语言缩进为4格;
  5. 涉及应用截图时,图片不能包含人物、关键信息、网络等有侵权风险的资源;
  6. 工程中不要配置签名信息,禁止上传local.properties和package-lock.json等系统自动生成的文件;
  7. 规范日志格式,统一用[Sample_包名]开头,如时钟日志,使用[Sample_Clock],日志打印需要使用Hilog接口,建议封装单独的Logger类 ,示例如下:
import hilog from '@ohos.hilog'
...
class Logger {private domain: number = 0xFF00private prefix: string = '[Sample_Clock]'private format: string = '%{public}, %{public}'...debug(...args: any[]) {hilog.debug(this.domain, this.prefix, this.format, args)}...
}
  1. 注释“//”后要加一个空格;如果注释跟在代码后面,则“//”前要加一个空格;
  // 正确示例let a = 10let a = 10 // 正确示例
  1. 代码中避免出现中文字符,要使用资源代替,符合国际化开发标准;
  2. 应用包名统一使用“com.samples.xxx”,“xxx”为特性名称;

ReadMe编写规范

  1. 标题:以特性名称命名;

  2. 介绍:介绍sample用了哪些包,具有哪些功能,给出完整包名并附上链接;

  3. 效果预览:屏幕截屏或者视频,文件不超过4个;

    3.1 使用说明:介绍应用的使用说明,具体的操作步骤和用法信息,示例如下:

    1. 在主界面,可以点击图片、视频、文档、音频等按钮进入对应目录的文件列表浏览界面;
    2. 在文件列表浏览界面,点击“+”按钮,可以添加文件;
    3. 在文件列表浏览界面,长按列表项会出现删除图片,点击删除图标可以删除文件;
    4. 在图片文件列表界面,点击图片可以进入图片预览界面。
  4. 工程目录:给出项目中关键的目录结构并描述它们的作用,示例如下:

    entry/src/main/ets/
    |---Application
    |---filemanager
    |   |---data
    |   |   |---FileDataSource.ets             // 懒加载数据格式
    |   |---pages
    |   |   |---audio
    |   |   |   |---AudioFileList.ets          // 音频列表页面
    |   |   |---common
    |   |   |   |---FileList.ets               // 同类型文件列表展示页面,接收文件类型,展示特定类型的文件列表
    |   |   |---document
    |   |   |   |---DocumentFileList.ets       // 文档列表页面
    |   |   |---image
    |   |   |   |---ImageFileList.ets          // 图片列表页面
    |   |   |   |---ImagePreview.ets           // 图片预览页面
    |   |   |---video
    |   |   |   |---VideoFileList.ets          // 视频列表页面
    |   |   |---FileManagerHome.ets            // 首页主体内容
    |---MainAbility
    |---pages
    |   |---index.ets                          // 首页
    Library/src/main/ets/
    |---filemanager
    |   |---components
    |   |   |---ThumbnailImage.ets             // 缩略图组件
    |   |---fileio
    |   |   |---FileIoManager.ts               // 文件管理,待开发
    |   |---medialibrary
    |   |   |---MediaLibraryManager.ts         // 主要封装了mediaLibrary库相关的接口,实现相关功能,如:对文件的增、删、查和图片预览功能
    |   |---userfilemanager
    |   |   |---UserFileManager.ts             // 封装userFileManager库相关的接口
    |   |---FileManager.ts                     // 文件管理接口,统一封装了各模块对外提供的功能接口
    |---mock                                   // 本地数据
    |---utils                                  // 日志工具
    
  5. 具体实现:
    先描述功能都在哪个模块,再具体描述如何实现这些功能的,以及在哪里使用他们,附上文件链接;示例如下:

    • 增添文件、删除文件、查找指定类型文件文件和预览图片的功能接口封装在MediaLibraryManager,源码参考:MediaLibraryManager.ts

      • 使用mediaLibrary.getMediaLibrary来获取MediaLibrary对象;
      • 读取每个文件的数据:使用MediaLibrary.getFileAssets读取满足条件的文件集合FetchFileResult,然后调用FetchFileResult.getFirstObject();
      • 创建模拟文件:使用MediaLibrary.getPublicDirectory()获取系统预定的目录,然后使用MediaLibrary.createAsset();
      • 删除指定路径的文件:使用MediaLibrary.deleteAsset();
      • 获取预览图:使用image.createImageSource()创建指定的文件资源ImageSource,然后调用ImageSource.createPixelMap(),接口参考:@ohos.multimedia.image 。
    • 在Library模块中通过封装FileManager向外提供功能接口,如MediaLibraryManager.getPixelMapByFileAsset(),源码参考:FileManager.ts

      • 如效果预览中的图片列表,读取指定类型的文件:在FileList.ets
        中调用FileManager.getFileAssets();
      • 创建模拟文件:在FileList.ets
        中调用FileManager.createTxtFileAsset();
      • 删除指定路径的文件:在FileList.ets
        中调用FileManager.deleteFileAsset();
      • 获取缩略图:在ThumbnailImage.ets 中调用FileManager.getThumbnail();
      • 如效果预览中的图片预览,获取预览图:在ImagePreview.ets 中调用FileManager.getPixelMapByFileAsset()。
  6. 相关权限:介绍应用的使用权限,附上链接;

  7. 依赖: 介绍对其他sample的依赖,附上sample链接;

  8. 约束与限制:

    6.1 支持应用运行的操作系统版本和设备,示例如下:

     本示例仅支持标准系统上运行,支持设备:RK3568;
    

    6.2 API版本、SDK版本(如果依赖Full SDK,附上替换链接),示例如下:

     本示例仅支持APIXX版本SDK,版本号:3.X.X.X;(如果涉及Full SDK还需加上:本涉及涉及使用系统接口:XXX,需要手动替换Full SDK才能编译通过,具体操作可参考[替换指南]。)
    

    6.3 支持的IDE版本,示例如下:

     本示例需要使用DevEco Studio 3.0 Beta4 (Build Version: 3.0.0.992, built on July 14, 2022)才可编译运行;
    

    6.4 高等级APL特殊签名说明,示例如下:

     本示例涉及[相关权限]为system_basic(或者system_core)级别(相关权限级别可通过[权限定义列表]查看),需要配置高权限签名,可参考[特殊权限配置方法];
    
  9. 下载:给出单独下载本工程的命令,在代码中替换工程目录并以/结尾,如下面示例中的 FileManager/FileManager,示例如下:

    如需单独下载本工程,执行如下命令:

    git init
    git config core.sparsecheckout true
    echo FileManager/FileManager/ > .git/info/sparse-checkout
    git remote add origin https://gitee.com/openharmony/applications_app_samples.git
    git pull origin master
    

ReadMe模板链接

工程结构规范

Sample工程,应该区分开场景业务逻辑和特性相关封装接口,规则如下:

  1. 包名命名规则为"com.samples.特性名",工程名命名规则为特性名称,与Readme标题保持一致;
  2. 特性接口封装放在Library模块下,能够独立编译成har包复用;
  3. 场景业务逻辑,展示Library模块中特性接口的使用,放在entry目录中;
  4. entry/src/main/ets/目录下的pages目录中,只放一个Index.ets,作为入口页面;
  5. entry/src/main/ets/目录下创建场景业务目录,存放该场景相关的业务逻辑和页面代码;
  6. Library/src/main/ets/目录下创建特性目录,目录下包括components(对外开放的控件目录)、feature(特性封装逻辑目录)、Feature.ts(对外开放的特性接口)等;

以FileManager特性为例,工程示例结构如下:

entry/src/main/ets/ 		// 场景业务逻辑放在entry目录下
|---Application 			// 应用级逻辑
|---MainAbility 			// 元能力组件
|---filemanager 			// 场景业务功能(如果存在多个场景,则放在同级目录下)
|   |---data 				// 场景业务逻辑相关类或数据
|   |---pages 				// 场景业务逻辑相关页面
|---pages 					// UI页面
|   |---Index.ets 			// pages下只保留一个Index.ets,作为入口页面
|---utils 					// 共用的工具类或者模块
Library/src/main/ets/ 		// 特性接口封装放在Library模块下,能够独立编译成har包复用
|---filemanager 			// 特性相关封装类
|   |---components 			// 特性相关UI控件类,需要对外开放(部分特性涉及对外提供复用UI控件)
|   |   |---FileImage.ets
|   |---fileio 				// 封装了特性相关接口,如果存在多个模块,放在多个目录下如fileio、medialibrary、userfilemanager,不对外开放
|   |   |---FileIoManager.ts
|   |---medialibrary
|   |---userfilemanager
|   |---FileManager.ts 		// 对外开放的特性接口,无具体实现(实现在fileio、medialibrary等模块中)
|---mock 					// 模拟数据
|---utils 					// 特性相关工具类

UI自动化用例编写规范

  1. 用例命名规范为:“包名_测试功能_序号”,如“MyApp_StartAbility_001”,序号表示测试StartAbility功能的第1个用例;
  2. 用例的开头和结尾都需要有日志打印;
  3. 打印必须包括用例名称的关键字,用例中每条断言语句前必须添加日志,打印参数信息;
  4. DOMAIN设置为0xF811;
  5. 用例名称中的包名和日志中的包名单独用常量表示,方便包名变更整改;
  6. 每条用例前需要添加注释;
  import hilog from '@ohos.hilog';...const TAG = '[Sample_MyApp]'const DOMAIN = 0xF811const BUNDLE = 'MyApp_'.../*** 介绍用例测试的功能和场景等信息*/it(BUNDLE + 'StartAbility_001', function() {hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, begin")...// 介绍单一步骤的功能hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, code:" + code)expect(0).asserEqual(code)...hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, end")})

PR提交格式规范

示例如下:

IssueNo: #I56EH7:关联问题
Description: 描述问题.
Sig: sig-systemapplications
Feature or Bugfix: Bugfix
Binary Source: NoSigned-off-by: jiangwensai <jiangwensai@huawei.com>
  1. IssueNo管理issue信息;
  2. Description描述修改变更内容;
  3. Sig统一使用SIG_Sample;
  4. Feature or Bugfix,如果是需求选择Feature,问题选择Bugfix;
  5. Signed-off-by,注明开发者账号和邮箱;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何提取音频中的封面

大家在播放MP3音乐的时候经常可以在播放器上看到这个音乐的封面&#xff0c;那么我们要如何提取MP3的音乐里面的封面呢&#xff1f; 打开智游剪辑&#xff08;官网: zyjj.cc&#xff09;&#xff0c;搜索音乐封面提取 然后就只需要拖入MP3文件点击提交就可以了 下面这里简单展示…

Python100个库分享第20个—xlrd(办公库篇)

目录 专栏导读库的介绍库的功能库的安装测试数据准备基础用法1:读取xlsx表格基础用法2:读取指定单元格的数据基础用法3:工作表的一些基本信息总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌…

预分频器×重装载值)/LSI频率 为什么等于总时间

1. 第一种算法理解&#xff1a;分频系数 64 &#xff0c;外部低速时钟40khz&#xff0c; 则一次计数周期1.6ms &#xff0c;计数625个数&#xff0c;则有625个周期 &#xff0c;1.6ms*625 等于1s 如果分频系数是64&#xff0c;外部低速时钟&#xff08;LSI&#xff09;频率是…

Linux硬件管理

文章目录 Linux硬件管理1.查看磁盘空间 df -h2.查看文件的磁盘占用空间 du -ah3.查看系统内存占用情况 htop Linux硬件管理 1.查看磁盘空间 df -h 语法 df [选项][参数]选项 -a或–all&#xff1a;包含全部的文件系统&#xff1b; –block-size<区块大小>&#xff1a;…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十三 简单去除图片水印效果 一、简单介绍 二、简单去除图片水印效果实现原理 三、简单去除图片水印效果案例…

神经网络压缩图像

简介 典型的压缩管道由四个组件组成&#xff1a; 编码&#xff1a;输入图像 x x x通过编码器函数 ε \varepsilon ε&#xff0c;将其转换为潜在表示 z z z。 量化&#xff1a;截断 z z z以丢弃一些不重要的信息 熵编码&#xff1a;使用某种形式的熵编码&#xff08;例如&…

盲人安全导航技巧:科技赋能让出行更自如

作为一名资深记者&#xff0c;长期关注并报道无障碍领域的发展动态。今日&#xff0c;我将聚焦盲人安全导航技巧&#xff0c;探讨这一主题下科技如何赋能视障人士实现更为安全、独立的出行。一款融合了实时避障、拍照识别物体及场景功能的盲人出行辅助应用叫做蝙蝠避障&#xf…

Java中Session的实现

在Java中&#xff0c;Session是一种用于在Web应用程序中跟踪用户状态的机制。它允许服务器在不同的HTTP请求之间存储和检索特定于用户的信息。Session是建立在HTTP协议之上的&#xff0c;它通过在服务器和客户端之间传递一个唯一的标识符来跟踪用户。 下面是对Java中的Session的…

4G/5G布控球/移动执法仪/智能单兵电力巡检远程视频智能监控方案

一、背景与需求 随着科技的不断进步&#xff0c;视频监控技术已成为电力行业不可或缺的一环。电力行业的巡检及建设工作&#xff0c;因施工现场在人迹罕见的野外或山区&#xff0c;地形复杂多变&#xff0c;安全更是重中之重&#xff0c;现场工作的视频图像需实时传回监管中心…

【读论文】【泛读】三篇生成式自动驾驶场景生成: Bevstreet, DisCoScene, BerfScene

文章目录 1. Street-View Image Generation from a Bird’s-Eye View Layout1.1 Problem introduction1.2 Why1.3 How1.4 My takeaway 2. DisCoScene: Spatially Disentangled Generative Radiance Fields for Controllable 3D-aware Scene Synthesis2.1 What2.2 Why2.3 How2.4…

LabVIEW变速箱自动测试系统

LabVIEW变速箱自动测试系统 在农业生产中&#xff0c;采棉机作为重要的农用机械&#xff0c;其高效稳定的运行对提高采棉效率具有重要意义。然而&#xff0c;传统的采棉机变速箱测试方法存在测试效率低、成本高、对设备可能产生损害等问题。为了解决这些问题&#xff0c;开发了…

HTTP协议安全传输教程

HTTP协议有多个版本&#xff0c;包括但不限于HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2和HTTP/3。这些版本各自具有不同的特点和改进&#xff0c;以适应网络技术的发展和满足不同的需求。例如&#xff0c;HTTP/1.0使用文本格式传输数据&#xff0c;简单易用且兼容性好&#xff0c;…

十大排序——11.十大排序的比较汇总及Java中自带的排序算法

这篇文章对排序算法进行一个汇总比较&#xff01; 目录 0.十大排序汇总 0.1概述 0.2比较和非比较的区别 0.3基本术语 0.4排序算法的复杂度及稳定性 1.冒泡排序 算法简介 动图演示 代码演示 应用场景 算法分析 2.快速排序 算法简介 动图演示 代码演示 应用场景…

Linux LVM与磁盘配额

目录 一.LVM概述 LVM LVM机制的基本概念 PV&#xff08;Physical Volume&#xff0c;物理卷&#xff09; VG&#xff08;Volume Group&#xff0c;卷组&#xff09; LV&#xff08;Logical Volume&#xff0c;逻辑卷&#xff09; 二.LVM 的管理命令 三.创建并使用LVM …

04-12 周五基于VS code + Python实现CSDN发布文章的自动生成

简介 之前曾经说过&#xff0c;在撰写文章之后&#xff0c;需要&#xff0c;同样需要将外链的图像转换为的形式&#xff0c;因此&#xff0c;可以参考 04-12 周五 基于VS Code Python 实现单词的自动提取 配置步骤 配置task 在vscode的命令面板configure task。配置如下的任…

UbuntuServer22.04安装docker

通过ubuntuserver安装docker是搭建开发环境最便捷的方式之一。下面介绍一下再ubuntu22.04上如何安装docker。相关内容参考官网链接&#xff1a;Install Docker Engine on Ubuntu 根据官网推荐&#xff0c;利用apt命令的方式安装&#xff0c;首先需要设置docker仓库&#xff0c…

【Android AMS】startActivity流程分析

文章目录 AMSActivityStackstartActivity流程startActivityMayWaitstartActivityUncheckedLocked startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume, boolean keepCurTransition)resumeTopActivityLocked 参考 AMS是个用于管理Activity和其它组件运行…

贴片滚珠振动开关 / 振动传感器的用法

就是这种小东西&#xff1a; 上面的截图来自&#xff1a;https://item.szlcsc.com/3600130.html 以前写过一篇介绍这种东西内部的结构原理&#xff1a;贴片微型滚珠振动开关的结构原理。就是有个小滚珠会接通开关两边的电极&#xff0c;振动时滚珠会在内部蹦跳&#xff0c;开关…

手把手教你设计报表,轻松做出一份美观又实用的报表

你是不是在看着自己的呆板、没有特色的报表而深感苦恼&#xff0c;但同事却可以使用同样的数据制作并且展现出多样化的丰富美观的报表。要知道&#xff0c;除了要达成数据的准确度&#xff0c;基本的数据分析维度需求之外&#xff0c;报表的美观程度也有众多的隐藏“福利”与好…

自定义类似微信效果Preference

1. 为自定义Preference 添加背景&#xff1a;custom_preference_background.xml <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item><shape android:s…