Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
27b51c19
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
27b51c19
编写于
3月 26, 2021
作者:
N
NEEN
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed bugs
上级
6aebbdc0
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
88372 addition
and
181 deletion
+88372
-181
OpenHarmony-Overview_zh.md
OpenHarmony-Overview_zh.md
+2
-0
zh-cn/contribute/参与贡献.md
zh-cn/contribute/参与贡献.md
+3
-0
zh-cn/design/OpenHarmony-API-governance.md
zh-cn/design/OpenHarmony-API-governance.md
+139
-133
zh-cn/design/figures/API-Review-Process.png
zh-cn/design/figures/API-Review-Process.png
+0
-0
zh-cn/design/figures/API-Scope-And-Definition.png
zh-cn/design/figures/API-Scope-And-Definition.png
+0
-0
zh-cn/device-dev/quick-start/figures/qidong.png
zh-cn/device-dev/quick-start/figures/qidong.png
+0
-0
zh-cn/device-dev/quick-start/figures/启动成功并执行应用程序图.png
zh-cn/device-dev/quick-start/figures/启动成功并执行应用程序图.png
+0
-0
zh-cn/device-dev/quick-start/开发Hi3516第一个应用程序示例.md
zh-cn/device-dev/quick-start/开发Hi3516第一个应用程序示例.md
+122
-25
zh-cn/device-dev/quick-start/开发Hi3516第一个驱动程序示例.md
zh-cn/device-dev/quick-start/开发Hi3516第一个驱动程序示例.md
+2
-2
zh-cn/device-dev/quick-start/开发Hi3518第一个示例程序.md
zh-cn/device-dev/quick-start/开发Hi3518第一个示例程序.md
+119
-21
zh-cn/readme/public_sys-resources/icon-caution.gif
zh-cn/readme/public_sys-resources/icon-caution.gif
+0
-0
zh-cn/readme/public_sys-resources/icon-danger.gif
zh-cn/readme/public_sys-resources/icon-danger.gif
+0
-0
zh-cn/readme/public_sys-resources/icon-note.gif
zh-cn/readme/public_sys-resources/icon-note.gif
+0
-0
zh-cn/readme/public_sys-resources/icon-notice.gif
zh-cn/readme/public_sys-resources/icon-notice.gif
+0
-0
zh-cn/readme/public_sys-resources/icon-tip.gif
zh-cn/readme/public_sys-resources/icon-tip.gif
+0
-0
zh-cn/readme/public_sys-resources/icon-warning.gif
zh-cn/readme/public_sys-resources/icon-warning.gif
+0
-0
zh-cn/resources/OpenHarmony-Resources-V1.0.pdf
zh-cn/resources/OpenHarmony-Resources-V1.0.pdf
+87985
-0
未找到文件。
OpenHarmony-Overview_zh.md
浏览文件 @
27b51c19
...
@@ -321,6 +321,8 @@ English Version:[OpenHarmony Documentation](https://gitee.com/openharmony/docs
...
@@ -321,6 +321,8 @@ English Version:[OpenHarmony Documentation](https://gitee.com/openharmony/docs
参与贡献:
[
如何贡献链接
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E5%8F%82%E4%B8%8E%E8%B4%A1%E7%8C%AE.md
)
参与贡献:
[
如何贡献链接
](
https://gitee.com/openharmony/docs/blob/master/zh-cn/contribute/%E5%8F%82%E4%B8%8E%E8%B4%A1%E7%8C%AE.md
)
参与API治理:
[
OpenHarmony API治理章程
](
https://gitee.com/openharmony/docs/tree/master/zh-cn/design/OpenHarmony-API-governance.md
)
## 许可协议<a name="section1245517472115"></a>
## 许可协议<a name="section1245517472115"></a>
OpenHarmony主要遵循Apache License V2.0协议,详情参考各代码仓LICENSE声明。
OpenHarmony主要遵循Apache License V2.0协议,详情参考各代码仓LICENSE声明。
...
...
zh-cn/contribute/参与贡献.md
浏览文件 @
27b51c19
...
@@ -10,6 +10,9 @@
...
@@ -10,6 +10,9 @@
在“
[
docs/zh-cn/contribute
](
https://gitee.com/openharmony/docs/tree/master/zh-cn/contribute
)
“路径下获取CLA Markdown文件,将签署后的CLA Markdown文件发送邮件至
[
contact@openharmony.io
](
mailto:contact@openharmony.io
)
。(线上签署待开放)
在“
[
docs/zh-cn/contribute
](
https://gitee.com/openharmony/docs/tree/master/zh-cn/contribute
)
“路径下获取CLA Markdown文件,将签署后的CLA Markdown文件发送邮件至
[
contact@openharmony.io
](
mailto:contact@openharmony.io
)
。(线上签署待开放)
-
签署CLA--个人独立贡献者:个人名义参与开源,选择CLA协议。
-
签署CLA--法律实体贡献者:以公司、团队或者项目参与开源,代表XX法律实体签署CLA协议。
**行为准则**
**行为准则**
OpenHarmony是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守OpenHarmony社区的
[
行为守则
](
行为准则.md
)
。
OpenHarmony是一个开源社区。它完全依赖于社区提供友好的开发和协作环境,所以在参与社区贡献之前,请先阅读并遵守OpenHarmony社区的
[
行为守则
](
行为准则.md
)
。
...
...
zh-cn/
contribute
/OpenHarmony-API-governance.md
→
zh-cn/
design
/OpenHarmony-API-governance.md
浏览文件 @
27b51c19
**OpenHarmony API治理章程**
# OpenHarmony API治理章程
# **1 总览**
为了引导OpenHarmony应用生态健康、有序发展演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。
本章程由PMC批准发布,本对章程的修订必须经由PMC评审与批准发布。
## 总览
# **2 API范围与定义**
应用程序接口(API)位于应用层和框架层之间,是由操作系统预定义的、由框架层和系统应用提供给应用(包括系统应用和三方应用)开发使用的类、方法等用户程序编程接口;不包括OEM扩展接口。

为了引导OpenHarmony应用生态健康、有序发展演进,本章程对OpenHarmony API的新增、变更、废弃、删除等生命周期与治理流程进行约束,同时定义了基本的API设计要求。
OpenHarmony API按使用方分类包括:
本章程由PMC批准发布,本对章程的修订必须经由PMC评审与批准发布。
## API范围与定义
1) PublicApi:公开发布,提供给三方应用开发使用的API。
应用程序接口(API)位于应用层和框架层之间,是由操作系统预定义的、由框架层和系统应用提供给应用(包括系统应用和三方应用)开发使用的类、方法等用户程序编程接口;不包括OEM扩展接口。
1) SystemApi:非公开发布,仅授权系统应用可使用的API。
1) TestApi:受限发布,仅适用于xTS或应用调试阶段可使用的API。

OpenHarmony API按编程语言分类包括:
OpenHarmony API按使用方分类包括:
1) Java API:面向应用开放的Java编程语言接口。
-
PublicApi:公开发布,提供给三方应用开发使用的API。
1) JS API:面向应用开放的JavaScript编程语言接口。
-
SystemApi:非公开发布,仅授权系统应用可使用的API。
1) Native API:面向应用开放的C/C++编程语言接口。
-
TestApi:受限发布,仅适用于xTS或应用调试阶段可使用的API。
# **3 API治理**
OpenHarmony API按编程语言分类包括:
## **角色与职责**
-
Java API:面向应用开放的Java编程语言接口。
|
**涉及角色**
|
**API治理中的职责**
|
-
JS API:面向应用开放的JavaScript编程语言接口。
| - | - |
-
Native API:面向应用开放的C/C++编程语言接口。
|Contributor|API的设计和交付主体,负责API相关的代码与设计文档提交。|
|Committer|API相关的代码提交预审,Review+1。|
## API治理
|Maintainer|
<p>
新增API相关的代码提交评审,Review+2。
</p><p>
变更API相关的代码提交预审,Review+1。
</p>
|
### 角色与职责
|SIG|变更API相关的代码提交评审,Review+2。|
|PMC|API Version计划发布、API治理章程修订等。|
|
**涉及角色**
|
**API治理中的职责**
|
| - | - |
## **API评审流程**
|Contributor|API的设计和交付主体,负责API相关的代码与设计文档提交。|
API评审流程如下:
|Committer|API相关的代码提交预审,Review+1。|
|Maintainer|
<p>
新增API相关的代码提交评审,Review+2。
</p><p>
变更API相关的代码提交预审,Review+1。
</p>
|

|SIG|变更API相关的代码提交评审,Review+2。|
|PMC|API Version计划发布、API治理章程修订等。|
主要过程说明:
### API评审流程
1.
API评审申请、代码提交(Owner:Contributor),除代码提交外,如果涉及API新增或变更需同步提交相应的API设计文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、Maintainer等相关人员预审。
API评审流程如下:
1.
代码评审(Owner:Committer),涉及API提交的预审,预审通过Review+1。如果一次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Commiter评审,只有所有对应领域的Committer都要Review+1才能进入下一评审环节。
1.
API评审(Owner:Maintainer),新增API相关的代码提交评审,评审通过Review+2;变更API相关的代码提交预审,预审通过Review+1。如果一次提交同时涉及多个领域的API新增,相应的API评审申请和代码需要同时提交给相关领域的Maintainer评审,只需一个领域Maintainer评审Review+2即可代码合入。如果一次提交同时涉及多个领域的API变更,相应的API评审申请和代码需要同时提交给相关领域的Maintainer评审,只有所有对应领域的Maintainer都要Review+1才能进入下一评审环节。

1.
API变更评审(Owner:SIG),变更API相关的代码提交评审,评审通过Review+2。如果一次提交同时涉及多个领域的API变更,建议在主要修改涉及领域的SIG进行评审。
1.
评审完成。
主要过程说明:
## **API评审申请要素**
1.
API评审申请、代码提交(Owner:Contributor),除代码提交外,如果涉及API新增或变更需同步提交相应的API设计文档,详细说明API的需求来源、场景与使用方法、权限设计、隐私保护澄清等,详见后面的API评审申请要素。为避免后续的返工,Contributor可以在正式的API评审申请、代码提交之前,先通过邮件方式将API设计文档提交Committer、Maintainer等相关人员预审。
如果涉及API新增或变更需同步提交相应的API设计文档,建议包含如下要素:
1.
代码评审(Owner:Committer),涉及API提交的预审,预审通过Review+1。如果一次提交同时涉及多个领域的API新增或变更,相应的API评审申请和代码需要同时提交给相关领域的Commiter评审,只有所有对应领域的Committer都要Review+1才能进入下一评审环节。
1.
API评审(Owner:Maintainer),新增API相关的代码提交评审,评审通过Review+2;变更API相关的代码提交预审,预审通过Review+1。如果一次提交同时涉及多个领域的API新增,相应的API评审申请和代码需要同时提交给相关领域的Maintainer评审,只需一个领域Maintainer评审Review+2即可代码合入。如果一次提交同时涉及多个领域的API变更,相应的API评审申请和代码需要同时提交给相关领域的Maintainer评审,只有所有对应领域的Maintainer都要Review+1才能进入下一评审环节。
1.
需求来源与使用场景(必须);
1.
API变更评审(Owner:SIG),变更API相关的代码提交评审,评审通过Review+2。如果一次提交同时涉及多个领域的API变更,建议在主要修改涉及领域的SIG进行评审。
1.
API现状与差距分析,说明API新增或变更的必要性(必须);
1.
评审完成。
1.
API原型设计与使用方法说明(必须);必要时,可以进一步包含相应的使用样例(可选);
1.
API权限设计(必须);
### API评审申请要素
1.
API隐私保护方案与要求满足情况澄清(必须);
如果涉及API新增或变更需同步提交相应的API设计文档,建议包含如下要素:
1.
针对老接口的处理方式和相应的应用兼容措施(可选,如果涉及API变更,则必须包含);
1.
兼容性/性能/功耗/可靠性/测试等相关情况说明(可选,如不满足本章程 “4 API设计要求”,则必须包含相关说明)。
1.
需求来源与使用场景(必须);
1.
API现状与差距分析,说明API新增或变更的必要性(必须);
# **4 API设计要求**
1.
API原型设计与使用方法说明(必须);必要时,可以进一步包含相应的使用样例(可选);
## **一致性要求**
1.
API权限设计(必须);
1.
概念一致性:基于场景的业务模型抽象,形成OpenHarmony的连贯、一致、自恰的用户程序模型和业务概念。
1.
API隐私保护方案与要求满足情况澄清(必须);
1.
术语一致性:相应的业务术语必须采用统一名词,不允许使用多个语意接近的名词表示同一个业务对象;同样地,为了避免产生混淆,也不允许针对不同的业务对象使用相同的名词或语言接近的名词。
1.
针对老接口的处理方式和相应的应用兼容措施(可选,如果涉及API变更,则必须包含);
1.
操作一致性:相同的操作动作必须采用同一动词。
1.
兼容性/性能/功耗/可靠性/测试等相关情况说明(可选,如不满足本章程 “4 API设计要求”,则必须包含相关说明)。
1.
参数顺序一致性:相同参数/参数序列在多个API中的位置和顺序保持一致。
1.
机制及算法一致性:通信机制、调用模式、认证机制、加密算法等保持一致。
## API设计要求
1.
帮助、Demo、模板风格一致性:排版、用法等保持一致。
### 一致性要求
1.
概念一致性:基于场景的业务模型抽象,形成OpenHarmony的连贯、一致、自恰的用户程序模型和业务概念。
## **易用性要求**
1.
术语一致性:相应的业务术语必须采用统一名词,不允许使用多个语意接近的名词表示同一个业务对象;同样地,为了避免产生混淆,也不允许针对不同的业务对象使用相同的名词或语言接近的名词。
以“能力使用者”视角,而不是“能力提供者”视角设计API:
1.
操作一致性:相同的操作动作必须采用同一动词。
1.
参数顺序一致性:相同参数/参数序列在多个API中的位置和顺序保持一致。
1.
可理解:API命名和功能特性必须容易理解。
1.
机制及算法一致性:通信机制、调用模式、认证机制、加密算法等保持一致。
1.
易使用:提供简单易用的API,减少API之间不必要的耦合,避免多个无之间关联关系API之间调用顺序的依赖,尽可能使调用者优雅,尽量避免使用单一功能时必须同时组合调用多个包/模块或类中的多方法才能实现。
1.
帮助、Demo、模板风格一致性:排版、用法等保持一致。
1.
避免误导:提供使用者期望的能力,避免误导,减少误用。
1.
提供必要的API文档。
### 易用性要求
以“能力使用者”视角,而不是“能力提供者”视角设计API:
## **命名要求**
1.
能清晰的表达意图:使用完整的描述性的单词。
1.
可理解:API命名和功能特性必须容易理解。
1.
避免造成误导:有误导的名字比表达不清的名字还要有危害性。
1.
易使用:提供简单易用的API,减少API之间不必要的耦合,避免多个无之间关联关系API之间调用顺序的依赖,尽可能使调用者优雅,尽量避免使用单一功能时必须同时组合调用多个包/模块或类中的多方法才能实现。
1.
词义清晰明了,避免使用info,data,object等一般意义的词。
1.
避免误导:提供使用者期望的能力,避免误导,减少误用。
1.
作用域越大,命名应越精确。
1.
提供必要的API文档。
1.
不用或少用缩写,业界通用术语遵从行业习惯允许使用缩写。
### 命名要求
## **权限控制要求**
1.
能清晰的表达意图:使用完整的描述性的单词。
1.
完备性原则:一切穿透应用沙箱的行为都需考虑使用权限来管控。
1.
避免造成误导:有误导的名字比表达不清的名字还要有危害性。
1.
最优粒度原则:一个权限只保护一类对象;一个接口仅需申请一个权限即可访问。
1.
词义清晰明了,避免使用info,data,object等一般意义的词。
1.
清晰完整原则:权限定义中必须清晰说明保护对象、开放范围、敏感级别。
1.
作用域越大,命名应越精确。
1.
最小开放原则:一个权限仅对确有正当业务需求的应用开放,开放控制可通过权限来实现。
1.
不用或少用缩写,业界通用术语遵从行业习惯允许使用缩写。
## **隐私保护要求**
### 权限控制要求
1.
API调用的返回仅包含必要的内容, 避免携带额外信息。
1.
完备性原则:一切穿透应用沙箱的行为都需考虑使用权限来管控。
1.
API调用不允许获取、手机用户个人数据, 除非通过用户权限管控、由用户授权同意。
1.
最优粒度原则:一个权限只保护一类对象;一个接口仅需申请一个权限即可访问。
1.
API涉及跨应用调用时,如涉及个人数据向被调用者的披露,由调用方在隐私声明中说明披露的数据类型、数据接收者和数据使用目的。
1.
清晰完整原则:权限定义中必须清晰说明保护对象、开放范围、敏感级别。
1.
API涉及到用户敏感数据(如电话、通讯录、媒体等)访问时,需要使用system picker的机制,禁止API通过申请敏感权限方式访问。
1.
最小开放原则:一个权限仅对确有正当业务需求的应用开放,开放控制可通过权限来实现。
1.
API开放禁止捆绑与所开放能力不相关的功能。
### 隐私保护要求
## **文档化要求**
1.
API调用的返回仅包含必要的内容, 避免携带额外信息。
1.
API参考采用英文方式交付。
1.
API调用不允许获取、手机用户个人数据, 除非通过用户权限管控、由用户授权同意。
1.
模块/包模块的API参考必须包括简要描述和详细描述。
1.
API涉及跨应用调用时,如涉及个人数据向被调用者的披露,由调用方在隐私声明中说明披露的数据类型、数据接收者和数据使用目的。
1.
类、方法、“Interface”、枚举或成员变量的API参考必须包括简要描述。
1.
API涉及到用户敏感数据(如电话、通讯录、媒体等)访问时,需要使用system picker的机制,禁止API通过申请敏感权限方式访问。
1.
类、方法、“Interface”、枚举或成员变量的API参考可选包括详细描述。
1.
API开放禁止捆绑与所开放能力不相关的功能。
1.
方法、“Interface”的API参考必须包括所有入参的参数描述。
1.
如果方法或“Interface”有返回值,则API参考必须包含返回值描述。
### 文档化要求
1.
如果执行过程中可能抛出异常,则API参数必须包含相关的异常描述。
1.
API参考采用英文方式交付。
1.
必须包含API的起始版本号(使用@since注释标记)。
1.
模块/包模块的API参考必须包括简要描述和详细描述。
1.
可选包括本模块或类自己的版本号(使用@version注释标记)。
1.
类、方法、“Interface”、枚举或成员变量的API参考必须包括简要描述。
1.
类、方法、“Interface”、枚举或成员变量的API参考可选包括详细描述。
## **兼容性要求**
1.
方法、“Interface”的API参考必须包括所有入参的参数描述。
1.
按严格程度从高到低,API兼容要求包括:契约兼容 > 二进制兼容 > 源码兼容。
1.
如果方法或“Interface”有返回值,则API参考必须包含返回值描述。
1.
源码兼容:指版本演进后,开发者已有的源代码可正常编译通过。
1.
如果执行过程中可能抛出异常,则API参数必须包含相关的异常描述。
1.
二进制兼容:指版本演进后,开发者已有程序不用重新编译可正常链接、运行。
1.
必须包含API的起始版本号(使用@since注释标记)。
1.
契约兼容:也称语义兼容,指版本演进后,开发者原有程序行为不发生变化。
1.
可选包括本模块或类自己的版本号(使用@version注释标记)。
1.
OpenHarmony API后向兼容必须满足二进制兼容要求,常见破坏二进制兼容的API变更包括:
1.
任何API元素删除;
### 兼容性要求
1.
降低方法的可见性,例如protected修改为了private,或者public修改为protected。
1.
按严格程度从高到低,API兼容要求包括:契约兼容 > 二进制兼容 > 源码兼容。
1.
类类型发生变化,例如抽象类变更为非抽象类,或者接口类(“Interface”)变更为非接口类。
1.
源码兼容:指版本演进后,开发者已有的源代码可正常编译通过。
1.
方法原型发生变化,例如返回值类型修改,或入参顺序或入参类型发生变化。
1.
二进制兼容:指版本演进后,开发者已有程序不用重新编译可正常链接、运行。
1.
成员final/static等属性发生变化,例如非final成员变成final,或者非static的成员变成static。
1.
契约兼容:也称语义兼容,指版本演进后,开发者原有程序行为不发生变化。
1.
OpenHarmony API在特定目的下,如Bugfix,允许不遵守契约兼容要求。
1.
OpenHarmony API后向兼容必须满足二进制兼容要求,常见破坏二进制兼容的API变更包括:
1.
禁止“原型相同、功能不兼容”的API修改,可受限使用“废弃old-api、新增new-api”的方式进行修改。
1.
任何API元素删除;
1.
已经对外发布的API,需要遵守对外部开发者的“契约承诺”,原则上不允许对已经发布的API进行不兼容修改,受限允许对已发布的API进行废弃。已发布API废弃基本要求包括:
1.
降低方法的可见性,例如protected修改为了private,或者public修改为protected。
1.
废弃接口标记。
1.
类类型发生变化,例如抽象类变更为非抽象类,或者接口类(“Interface”)变更为非接口类。
1.
提供可替代接口。
1.
方法原型发生变化,例如返回值类型修改,或入参顺序或入参类型发生变化。
1.
废弃API至少保留5个API Version版本(对废弃5个API Version的API可以彻底删除,不再支持)。
1.
成员final/static等属性发生变化,例如非final成员变成final,或者非static的成员变成static。
1.
OpenHarmony API在特定目的下,如Bugfix,允许不遵守契约兼容要求。
## **性能/功耗/可靠性要求**
1.
禁止“原型相同、功能不兼容”的API修改,可受限使用“废弃old-api、新增new-api”的方式进行修改。
1.
应及时响应,避免调用者等待;如果API调用执行时间过长应设计为异步方式。
1.
已经对外发布的API,需要遵守对外部开发者的“契约承诺”,原则上不允许对已经发布的API进行不兼容修改,受限允许对已发布的API进行废弃。已发布API废弃基本要求包括:
1.
应关注API调用时机、调用频次对RAM占用的影响。
1.
废弃接口标记。
1.
应关注API调用时机、调用频次对功耗的影响。
1.
提供可替代接口。
1.
API内部创建对象的生命周期要闭合,避免对象资源泄漏。
1.
废弃API至少保留5个API Version版本(对废弃5个API Version的API可以彻底删除,不再支持)。
1.
满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。
### 性能/功耗/可靠性要求
## **测试要求**
1.
应及时响应,避免调用者等待;如果API调用执行时间过长应设计为异步方式。
1.
新增API必须同步交付API自动化测试用例,用例100%覆盖API接口。
1.
应关注API调用时机、调用频次对RAM占用的影响。
1.
用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。
1.
应关注API调用时机、调用频次对功耗的影响。
1.
API内部创建对象的生命周期要闭合,避免对象资源泄漏。
1.
满足幂等性要求,相同业务含义的请求API调用一次或多次重试总能获得相同的效果(API调用依赖外部资源的变化除外)。针对可重入的API调用实现内部应尽量避免引入时变因素,如系统tick、静态变量、没有互斥保护的全局变量等;针对同一客户端的多次重复调用,可以使用contextID、clientToken、squenceNo等作为调用入参。
### 测试要求
1.
新增API必须同步交付API自动化测试用例,用例100%覆盖API接口。
1.
用例场景单一,单条用例覆盖接口单个功能场景,简化单条用例代码逻辑。
1.
用例执行高效,每条用例执行时间控制在毫秒级。
1.
用例执行高效,每条用例执行时间控制在毫秒级。
\ No newline at end of file
zh-cn/
readme
/figures/API-Review-Process.png
→
zh-cn/
design
/figures/API-Review-Process.png
浏览文件 @
27b51c19
文件已移动
zh-cn/
readme
/figures/API-Scope-And-Definition.png
→
zh-cn/
design
/figures/API-Scope-And-Definition.png
浏览文件 @
27b51c19
文件已移动
zh-cn/device-dev/quick-start/figures/qidong.png
已删除
100644 → 0
浏览文件 @
6aebbdc0
5.4 KB
zh-cn/device-dev/quick-start/figures/启动成功并执行应用程序图.png
查看替换文件 @
6aebbdc0
浏览文件 @
27b51c19
14.1 KB
|
W:
|
H:
2.3 KB
|
W:
|
H:
2-up
Swipe
Onion skin
zh-cn/device-dev/quick-start/开发Hi3516第一个应用程序示例.md
浏览文件 @
27b51c19
# 开发Hi3516第一个应用程序示例<a name="ZH-CN_TOPIC_0000001052906247"></a>
# 开发Hi3516第一个应用程序示例<a name="ZH-CN_TOPIC_0000001052906247"></a>
-
[
修改
应用程序
](
#s8efc1952ebfe4d1ea717182e108c29bb
)
-
[
新建
应用程序
](
#s8efc1952ebfe4d1ea717182e108c29bb
)
-
[
编译
](
#section1077671315253
)
-
[
编译
](
#section1077671315253
)
-
[
烧录
](
#section08153912587
)
-
[
烧录
](
#section08153912587
)
-
[
镜像运行
](
#section380511712615
)
-
[
镜像运行
](
#section380511712615
)
-
[
执行应用程序
](
#section5276734182615
)
-
[
执行应用程序
](
#section5276734182615
)
本节指导开发者在单板上运行第一个应用程序,其中包括
修改
应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。
本节指导开发者在单板上运行第一个应用程序,其中包括
新建
应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。
##
修改
应用程序<a name="s8efc1952ebfe4d1ea717182e108c29bb"></a>
##
新建
应用程序<a name="s8efc1952ebfe4d1ea717182e108c29bb"></a>
源码目录applications/sample/camera/app/src内
**helloworld.c**
代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
1.
新建目录及源码
```
新建**applications/sample/camera/apps/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
#include <stdio.h>
#include "los_sample.h"
int main(int argc, char **argv)
```
{
#include <stdio.h>
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
int main(int argc, char **argv)
printf("\n************************************************\n\n");
{
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
printf("\n************************************************\n\n");
return 0;
}
```
2.
新建编译组织文件
新建**applications/sample/camera/apps/BUILD.gn**文件,内容如下所示:
```
import("//build/lite/config/component/lite_component.gni")
lite_component("hello-OHOS") {
features = [ ":helloworld" ]
}
executable("helloworld") {
output_name = "helloworld"
sources = [ "src/helloworld.c" ]
include_dirs = []
defines = []
cflags_c = []
ldflags = []
}
```
3.
添加新组件
修改文件**build/lite/components/applications.json**,添加组件hello\_world\_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"components": [
{
"component": "camera_sample_communication",
"description": "Communication related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/communication"
],
"targets": [
"//applications/sample/camera/communication:sample"
],
"rom": "",
"ram": "",
"output": [],
"adapted_kernel": [ "liteos_a" ],
"features": [],
"deps": {
"components": [],
"third_party": []
}
},
##start##
{
"component": "hello_world_app",
"description": "Communication related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/apps"
],
"targets": [
"//applications/sample/camera/apps:hello-OHOS"
],
"rom": "",
"ram": "",
"output": [],
"adapted_kernel": [ "liteos_a" ],
"features": [],
"deps": {
"components": [],
"third_party": []
}
},
##end##
{
"component": "camera_sample_app",
"description": "Camera related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/launcher",
"applications/sample/camera/cameraApp",
"applications/sample/camera/setting",
"applications/sample/camera/gallery",
"applications/sample/camera/media"
],
```
4.
修改单板配置文件
修改文件**vendor/hisilicon/hispark\_taurus/config.json**,新增hello\_world\_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
"components": [
{ "component": "camera_sample_app", "features":[] },
{ "component": "camera_sample_ai", "features":[] },
##start##
{ "component": "hello_world_app", "features":[] },
##end##
{ "component": "camera_screensaver_app", "features":[] }
]
},
```
LOS_Sample(g_num);
return 0;
}
```
## 编译<a name="section1077671315253"></a>
## 编译<a name="section1077671315253"></a>
...
@@ -45,7 +144,7 @@ hb build -f(执行编译)
...
@@ -45,7 +144,7 @@ hb build -f(执行编译)
结果文件生成在out/hispark
\_
taurus/ipcamera
\_
hispark
\_
taurus目录下。
结果文件生成在out/hispark
\_
taurus/ipcamera
\_
hispark
\_
taurus目录下。
> **须知:**
> **须知:**
>Hi3516DV300单板的U-boot文件获取路径:
vendor\\hisi\\hi35xx\\hi3516dv300\\uboot\\out\\boot\\
u-boot-hi3516dv300.bin
>Hi3516DV300单板的U-boot文件获取路径:
device/hisilicon/hispark\_taurus/sdk\_liteos/uboot/out/boot/
u-boot-hi3516dv300.bin
## 烧录<a name="section08153912587"></a>
## 烧录<a name="section08153912587"></a>
...
@@ -114,13 +213,13 @@ Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三
...
@@ -114,13 +213,13 @@ Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三


1. 单击**Serial port**打开串口。
1. 单击**Serial port**打开串口。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisil
l
icon"。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisilicon"。
3. 单板初次启动或修改启动参数,请进入[步骤2](#l5b42e79a33ea4d35982b78a22913b0b1),否则进入[步骤3](#ld26f18828aa44c36bfa36be150e60e49)。
3. 单板初次启动或修改启动参数,请进入[步骤2](#l5b42e79a33ea4d35982b78a22913b0b1),否则进入[步骤3](#ld26f18828aa44c36bfa36be150e60e49)。
2.
<a
name=
"l5b42e79a33ea4d35982b78a22913b0b1"
></a>
(单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。
2.
<a
name=
"l5b42e79a33ea4d35982b78a22913b0b1"
></a>
(单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。
> **须知:**
> **须知:**
>U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisil
l
icon",通过**reset**命令可再次启动系统。
>U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisilicon",通过**reset**命令可再次启动系统。
**表 1** U-boot修改命令
**表 1** U-boot修改命令
...
@@ -168,10 +267,8 @@ Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三
...
@@ -168,10 +267,8 @@ Hi3516开发板的代码烧录支持USB烧录、网口烧录和串口烧录三
## 执行应用程序<a name="section5276734182615"></a>
## 执行应用程序<a name="section5276734182615"></a>
根目录下,在命令行输入指令“
**./bin/camera\_app**
”执行写入的demo程序,显示成功结果如下图所示。
根目录下,在命令行输入指令“
**./bin/helloworld**
”执行写入的demo程序,显示成功结果如下图所示。
**图 4**
应用程序启动图
<a
name=
"fig36537913815"
></a>

**图 4**
启动并成功执行应用程序图
<a
name=
"fig1341618411997"
></a>

zh-cn/device-dev/quick-start/开发Hi3516第一个驱动程序示例.md
浏览文件 @
27b51c19
...
@@ -438,13 +438,13 @@
...
@@ -438,13 +438,13 @@


1. 单击**Serial port**打开串口。
1. 单击**Serial port**打开串口。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisil
l
icon"。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisilicon"。
3. 单板初次启动或修改启动参数,请进入[步骤2](开发Hi3516第一个应用程序示例.md#l5b42e79a33ea4d35982b78a22913b0b1),否则进入[步骤3](开发Hi3516第一个应用程序示例.md#ld26f18828aa44c36bfa36be150e60e49)。
3. 单板初次启动或修改启动参数,请进入[步骤2](开发Hi3516第一个应用程序示例.md#l5b42e79a33ea4d35982b78a22913b0b1),否则进入[步骤3](开发Hi3516第一个应用程序示例.md#ld26f18828aa44c36bfa36be150e60e49)。
2.
(单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。
2.
(单板初次启动必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,若不修改参数只需执行一次。每次复位单板均会自动进入系统。
> **须知:**
> **须知:**
>U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisil
l
icon",通过**reset**命令可再次启动系统。
>U-boot引导程序默认会有2秒的等待时间,用户可使用回车打断等待并显示"hisilicon",通过**reset**命令可再次启动系统。
**表 1** U-boot修改命令
**表 1** U-boot修改命令
...
...
zh-cn/device-dev/quick-start/开发Hi3518第一个示例程序.md
浏览文件 @
27b51c19
# 开发Hi3518第一个示例程序<a name="ZH-CN_TOPIC_0000001053422339"></a>
# 开发Hi3518第一个示例程序<a name="ZH-CN_TOPIC_0000001053422339"></a>
-
[
修改应用程序
](
#s8efc1952ebfe4d1ea717182e108c29bb
)
-
[
新建应用程序
](
#section20460103116446
)
-
[
编译
](
#section234175193114
)
-
[
编译
](
#section234175193114
)
-
[
烧录
](
#section57955241588
)
-
[
烧录
](
#section57955241588
)
-
[
镜像运行
](
#section62131033183710
)
-
[
镜像运行
](
#section62131033183710
)
-
[
下一步学习
](
#section9712145420182
)
-
[
下一步学习
](
#section9712145420182
)
本节指导开发者在单板上运行第一个应用程序,其中包括
修改应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”
本节指导开发者在单板上运行第一个应用程序,其中包括
新建应用程序、编译、烧写、运行等步骤,最终输出“Hello OHOS!”。
##
修改应用程序<a name="s8efc1952ebfe4d1ea717182e108c29bb
"></a>
##
新建应用程序<a name="section20460103116446
"></a>
源码applications/sample/camera/app/src目录内helloworld.c代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持ISO C及C++的代码开发。
1.
新建目录及源码
```
新建**applications/sample/camera/apps/src/helloworld.c**目录及文件,代码如下所示,用户可以自定义修改打印内容(例如:修改OHOS为World)。当前应用程序可支持标准C及C++的代码开发。
#include <stdio.h>
#include "los_sample.h"
int main(int argc, char **argv)
{
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
printf("\n************************************************\n\n");
LOS_Sample(g_num);
```
#include <stdio.h>
int main(int argc, char **argv)
{
printf("\n************************************************\n");
printf("\n\t\tHello OHOS!\n");
printf("\n************************************************\n\n");
return 0;
}
```
2.
新建编译组织文件
新建**applications/sample/camera/apps/BUILD.gn**文件,内容如下所示:
```
import("//build/lite/config/component/lite_component.gni")
lite_component("hello-OHOS") {
features = [ ":helloworld" ]
}
executable("helloworld") {
output_name = "helloworld"
sources = [ "src/helloworld.c" ]
include_dirs = []
defines = []
cflags_c = []
ldflags = []
}
```
3.
添加新组件
修改文件**build/lite/components/applications.json**,添加组件hello\_world\_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"components": [
{
"component": "camera_sample_communication",
"description": "Communication related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/communication"
],
"targets": [
"//applications/sample/camera/communication:sample"
],
"rom": "",
"ram": "",
"output": [],
"adapted_kernel": [ "liteos_a" ],
"features": [],
"deps": {
"components": [],
"third_party": []
}
},
##start##
{
"component": "hello_world_app",
"description": "Communication related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/apps"
],
"targets": [
"//applications/sample/camera/apps:hello-OHOS"
],
"rom": "",
"ram": "",
"output": [],
"adapted_kernel": [ "liteos_a" ],
"features": [],
"deps": {
"components": [],
"third_party": []
}
},
##end##
{
"component": "camera_sample_app",
"description": "Camera related samples.",
"optional": "true",
"dirs": [
"applications/sample/camera/launcher",
"applications/sample/camera/cameraApp",
"applications/sample/camera/setting",
"applications/sample/camera/gallery",
"applications/sample/camera/media"
],
```
4.
修改单板配置文件
修改文件**vendor/hisilicon/hispark\_aries/config.json**,新增hello\_world\_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
```
{
"subsystem": "applications",
"components": [
##start##
{ "component": "hello_world_app", "features":[] },
##end##
{ "component": "camera_sample_app", "features":[] }
]
},
```
return 0;
}
```
## 编译<a name="section234175193114"></a>
## 编译<a name="section234175193114"></a>
...
@@ -45,7 +143,7 @@ hb build -f(执行编译)
...
@@ -45,7 +143,7 @@ hb build -f(执行编译)


> **须知:**
> **须知:**
>Hi3518EV300单板的U-boot文件获取路径:
vendor\\hisi\\hi35xx\\hi3518ev300\\uboot\\out\\boot\\
u-boot-hi3518ev300.bin
>Hi3518EV300单板的U-boot文件获取路径:
device/hisilicon/hispark\_aries/sdk\_liteos/uboot/out/boot/
u-boot-hi3518ev300.bin
## 烧录<a name="section57955241588"></a>
## 烧录<a name="section57955241588"></a>
...
@@ -113,7 +211,7 @@ Hi3518开发板的代码烧录仅支持USB烧录方式。
...
@@ -113,7 +211,7 @@ Hi3518开发板的代码烧录仅支持USB烧录方式。


1. 单击**Serial port**打开串口。
1. 单击**Serial port**打开串口。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisil
l
icon"。
2. 输入串口编号\(按照烧录步骤中查询的串口号,此处以com11举例\),并连续输入回车直到串口显示"hisilicon"。
3. 单板初次启动或修改启动参数,请进入[步骤2](#li9441185382314),否则进入[步骤3](#li6442853122312)。
3. 单板初次启动或修改启动参数,请进入[步骤2](#li9441185382314),否则进入[步骤3](#li6442853122312)。
2.
<a
name=
"li9441185382314"
></a>
(初次烧写必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,可保存执行结果,但U-boot重新烧入,则需要再次执行下述步骤。
2.
<a
name=
"li9441185382314"
></a>
(初次烧写必选)修改U-boot的bootcmd及bootargs内容:该步骤为固化操作,可保存执行结果,但U-boot重新烧入,则需要再次执行下述步骤。
...
@@ -158,9 +256,9 @@ Hi3518开发板的代码烧录仅支持USB烧录方式。
...
@@ -158,9 +256,9 @@ Hi3518开发板的代码烧录仅支持USB烧录方式。
> **须知:**
> **须知:**
>**“go 0x40000000”**为可选指令,默认配置已将该指令固化在启动参数中,单板复位后可自动启动。若想切换为手动启动,可在U-boot启动倒数阶段使用"回车"打断自动启动。
>**“go 0x40000000”**为可选指令,默认配置已将该指令固化在启动参数中,单板复位后可自动启动。若想切换为手动启动,可在U-boot启动倒数阶段使用"回车"打断自动启动。
3.
<a
name=
"li6442853122312"
></a>
若启动时显示
**"hisilicon \#**
字样,请输入
**“reset”**
指令,等待系统自启动进入系统,系统启动后,显示
**“OHOS”**
字样,输入
**”./bin/
camera\_app
”**
并回车,显示成功结果如下图所示。
3.
<a
name=
"li6442853122312"
></a>
若启动时显示
**"hisilicon \#**
字样,请输入
**“reset”**
指令,等待系统自启动进入系统,系统启动后,显示
**“OHOS”**
字样,输入
**”./bin/
helloworld
”**
并回车,显示成功结果如下图所示。
**图 3** 启动成功并执行应用程序图<a name="fig
11838403383
"></a>
**图 3** 启动成功并执行应用程序图<a name="fig
265662981319
"></a>


...
...
zh-cn/readme/public_sys-resources/icon-caution.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
580 字节
zh-cn/readme/public_sys-resources/icon-danger.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
580 字节
zh-cn/readme/public_sys-resources/icon-note.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
394 字节
zh-cn/readme/public_sys-resources/icon-notice.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
406 字节
zh-cn/readme/public_sys-resources/icon-tip.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
253 字节
zh-cn/readme/public_sys-resources/icon-warning.gif
已删除
100644 → 0
浏览文件 @
6aebbdc0
580 字节
zh-cn/resources/OpenHarmony-Resources-V1.0.pdf
0 → 100644
浏览文件 @
27b51c19
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录