当前位置: 首页 > 科技观察

OpenHarmony文档入门

时间:2023-03-16 02:06:23 科技观察

了解更多开源知识请访问:开源基础软件社区https://ost.51cto.com软件开发,用于接触新系统OpenHarmony。要学习OpenHarmony,你需要知道OpenHarmony系统是什么,它能做什么。今天将从设备开发和应用开发两个方向来分享OpenHarmony/docs文档的学习。一、设备开发介绍1、环境搭建与源码获取环境搭建OpenHarmony系统环境搭建需要Windows系统和Ubuntu系统配合使用。Windows系统负责在windows系统的cmd模式下与OpenHarmony进行烧录、测试、交互。Ubuntu系统负责源码管理、阅读、开发、编译。对于Ubuntu系统,在Windows系统上安装虚拟机,配置并初始化虚拟机(建议16GB以上内存,推荐4核以上CPU),运行虚拟机安装Ubuntu系统。具体可以参考:搭建轻量级小型系统环境获取源码在Ubuntu环境下,更新软件源命令sudoapt-getupdate。通过sudoapt_getinstallgitgit-lfs安装git客户端和git-lfs,命令git--version查看git是否成功。配置git客户端。安装码云repo工具,通过mkdir命令在固定目录下创建存放repo的文件目录。通过命令curlhttps://gitee.com/oschina/repo/raw/fork_flow/repo-py3-o目录获取repo工具。安装配置完成后,通过以下命令步骤获取OpenHarmony源码。详情请参考:源码获取二、HarmonyOs源码编译及编译环境搭建在Ubuntu环境下,编译OpenHarmony源码前,必须先搭建好编译环境。通过apt_get和pip3install命令安装和配置编译环境。通过apt-getupdate-y更新软件源。更新成功后,在编译前使用apt-get命令安装配置OpenHarmony源码。具体可以参考:环境配置编译命令成功配置编译环境。在Ubuntu环境下,打开CMD命令行窗口,通过cd命令进入HarmonyOs目录。目录结构如下。在OpenHarmony源码根目录下,执行命令bashbuild/prebuilts_download.sh脚本进行预编译,安装编译器和二进制工具,提示成功。然后执行命令./build.shsystem_size=standardproduct_name=harmonyos编译OpenHarmony源码。./build.sh还支持各种其他参数。--source-root-dir=SOURCE_ROOT_DIR#指定路径--product-name=PRODUCT_NAME#指定产品名称--device-name=DEVICE_NAME#指定设备名称--target-os=TARGET_OS#指定操作系统-TBUILD_TARGET,--build-target=BUILD_TARGET#指定编译目标,可以指定多个OpenHarmony源码编译成功,OpenHarmony源码根目录下out/harmonyos/packages/phone/images,终端显示在Ubuntu环境中。详情请参考:编译和构建编译错误在编译OpenHarmony源码的过程中,可能会出现各种问题。下面列出了一些例外情况。作为解决方法,通过执行命令sudoaptinstallopenjdk-11.0.16解决此问题。作为解决方法,通过执行命令sudoaptinstalllibtinfo5解决此问题。其他遇到的问题请参考:编译常见问题及解决方案3、OpenHarmonyBurning介绍Ubuntu环境下,OpenHarmony源码编译成功,OpenHarmony镜像文件存放路径,OpenHarmony源码所在路径存储在/out/harmony/packages/phone/images。Windows环境下使用RockchipDevelopmentToolv2.84(RKDevTool.exe)烧录工具将OpenHarmony文件烧录到开发版3568。windows环境下使用Rockchip开发工具前需要安装Rockchip驱动,打开瑞芯微开发工具,开发板同时上电,插入USB。烧录工具会显示找到MASKROM设备。开发板MASKROM模式无法成功烧录系统。开发板需要进入LOADER模式才能成功烧写OpenHarmony系统。如何进入LOADER模式?需要先用牙签按住3568开关,然后开机,开机后继续按住3568开关。烧录工具页面会显示找到一个LOADER设备,松开3568的开关,在瑞芯微开发工具中,选择编译成功后生成的OpenHarmony镜像,各个镜像文件的顺序不能颠倒。一旦选择的镜像文件被反了,烧写时大概率会直接烧毁3568开发板,导致3568开发板无法使用。正确选择OpenHarmony镜像文件,执行3568开发板编程。烧录工具会提示是否烧录成功。4.OpenHarmony测试用例OpenHarmony为开发者提供完善的自测框架,开发者可以根据测试需求开发相关的测试用例。同时,开发者还可以开发独立测试函数功能的可执行程序。window模块函数创建一个cpp文件,把main函数写在里面。main函数写的是业务逻辑流程。测试用例位于源路径(foundation/windowmanager/snapshot)中。编写BUILD.gn添加编译配置。在cpp目录的上层目录下,bundle.json文件添加了需要编译的模块。执行以下命令:./build.shsystem_size=standardproduct_name=harmonyos生成snapshot_display,存放在out/harmonyos/window/window_manager目录下。在snapshot_display目录下,执行如下命令:hdcfilesendsnapshot_display/system/bin推送到开发板/system/bin目录。异常提示[Fail]Erroropeningfile:read-onlyfilesystem,path:/system/bin/snapshot_display,insufficientpermissions.执行命令:hdcshellmount-oremount,rw/解决权限问题。设置执行权限,执行命令:hdcshellchmoda+x/system/bin/snapshot_display将程序snapshot_display推送到开发板。该文件存放的是开发板的实际路径。更多测试信息请参考:测试子系统5.OpenHarmony源码阅读推荐使用DevEcoStudio项目管理工具管理OpenHarmony源码,学习OpenHarmony项目工程整体目录结构和代码阅读等项目管理工具请选择适合个人学习的工具。二、应用开发介绍1、项目描述通过OpenHarmony提供的Stage模型和ArkUI的eTS声明式开发规范,结合一个简单的Demo,分享学习OpenHarmony/docs/application-dev(应用开发文档)。2、主要功能是显示目录标题和目录列表。单击目录列表可查看列表内容。点击目录标题的返回箭头可以返回到之前的内容。页面内容溢出,可以上下滑动查看内容。3、效果展示4、开发环境建设需要先搭建良好的开发环境。参考应用开发文档—工具:下载HUAWEIDevEcoStudioForOpenHarmony(简称DevEcoStudio)配置开发环境。5.创建项目开发环境搭建完成后,创建项目,了解项目结构。参考应用开发文档—快速入门:掌握OpenHarmony应用的一些基本概念:UI框架简述(方舟开发框架(ArkUIFramework))——类Web开发范式(JS)——声明式开发范式(eTS的基本概念)Ability(对应用能力的抽象)-FA模型-Stage模型应用包结构:FA模型结构,Stage模型结构。项目的目录结构:AppScope>app.json5:应用的全局配置信息。入口:OpenHarmony工程模块,编译构建生成HAP包。src>main>ets:用于存放ets源码。src>main>ets>Application>AbilityStage.ts:实现AbilityStage接口。src>main>ets>MainAbility:应用程序/服务的入口点。src>main>ets>MainAbility>MainAbility.ts:承载Ability生命周期。src>main>ets>pages:MainAbility包含的页面。src>main>resources:用于存放应用程序/服务使用的资源文件,例如图形、多媒体、字符串、布局文件等。资源文件详见资源文件分类。src>main>module.json5:模块配置文件。主要包括HAP包的配置信息、应用/服务在具体设备上的配置信息、应用/服务的全局配置信息。具体配置文件说明参见应用包结构配置文件说明(阶段模型)。build-profile.json5:当前模块信息,编译信息配置项,包括buildOption,targets配置等。hvigorfile.js:模块级编译构建任务脚本,开发者可以自定义相关任务和代码实现。build-profile.json5:应用级配置信息,包括签名、产品配置等。hvigorfile.js:应用级编译构建任务脚本。6.编写应用本文编写的应用是非常基础的内容,所以后面的内容更多的是对开发步骤的描述:参考应用开发文档-开发-UI开发。请参阅应用程序开发文档-API参考-组件参考(基于TS扩展的声明式开发范式)。(1)定义组件结构创建项目后,开始编写自定义组件,导入需要的文件,定义要使用的变量,然后添加组件将要使用的生命周期函数和构建方法。//引用需要的组件和APIimportTitleBarfrom'./components/titleBar'importrouterfrom'@ohos.router';//使用@Entry修饰的自定义组件作为页面的默认入口组件。在加载页面时,它会首先创建并渲染一个用@Entry装饰的自定义组件。@Entry//@Component修饰的struct,表示该结构体具有组件化能力,可以成为一个独立的组件。此类组件也称为自定义组件@ComponentstructIndex{//@State装饰变量在组件内部当状态数据被修改时,会调用组件的build方法刷新UI@Statetitle:string='UIcomponent'@StateisShowReturn:boolean=falseitems:Array=[]/函数在创建自定义组件的新实例之后执行,然后再执行其构建函数。允许在aboutToAppear函数中改变state变量,改变会在后续build函数的执行中生效。aboutToAppear(){...}//UI结构在build方法中描述build(){...}}(2)绘制组件UI组件结构写好了,开始绘制组件UI界面要求。build(){//ColumnsverticallylayoutcontainerColumn(){//导入的自定义组件TitleBar({title:this.title,isShowReturn:this.isShowReturn})//List包含一系列相同宽度项目的列表。适用于同一类型数据的连续、多行渲染List(){//ForEach渲染控制语法,循环渲染ForEach(this.items,(each)=>{ListItem(){Row(){//基础文本组件,显示一段文字ComponentText(each.name).fontSize(20)//基础图片组件,支持渲染本地图片和网络图片Image($r('app.media.arrow')).padding(8).width(40)}.width('100%').justifyContent(FlexAlign.SpaceBetween).padding(10)}//绑定一般点击事件onClick(()=>{...})})}}//设置常用属性,width(宽度)height(高度).width('100%').height('100%')}(3)添加交互逻辑界面UI绘制完成,再使用自定义组件的生命周期aboutToAppear回调函数编写界面数据初始化逻辑,完成界面上的交互逻辑。//编写接口数据初始化逻辑。aboutToAppear函数创建自定义组件的新实例后,在执行其构建函数之前执行aboutToAppear(){letrouterParams=router.getParams();//条件判断:routerParams==undefined是一级目录接口if(routerParams==undefined){...//条件判断:routerParams!==undefined是二级目录接口}else{...}}build(){...Row(){...}//编写点击事件的逻辑。onClick(()=>{//条件判断:each.children===undefined,点击的目录列表没有子目录if(each.children===undefined){router.push({url:each.path,params:{title:each.name}})//条件判断:each.children===undefined,点击的目录列表有子目录}else{router.push({url:each.path,params:{title:each.name,items:each.children}})}})...}(4)测试效果应用编写完成后,使用DevEcoStudioPreviewer提供的预览效果,测试应用运行效果是否满足预期效果。七、项目回顾在编写OpenHarmony应用的过程中,我踩了一些坑。总结如下:对eTS声明式范式下自定义组件的开发不熟悉。写应用的时候,理清了逻辑之后,很难顺利的写成代码。DevEcoStudio的Previewer可能会因为缓存导致预览效果出错。例如:添加了一个自定义组件,同时设置了点击跳转到新添加的自定义组件的事件,但是在Previewer中点击之后,没有任何反应。解决方法:在gitee上搜索OpenHarmony应用,可以检索到很多开发者上传的OpenHarmony应用,下载源码,模仿代码编写,同时查看文档,保证每一行代码都看懂。检查代码是否写对了。如果代码正确,通过DevEcoStudioBuild下的CleanProject清理缓存。CleanProject示意图:项目源码https://gitee.com/chucheng42/simple-project。Otherthird-party-components第三方库文件存放目录。该目录统一管理第三方库的文件,如头文件(.h)、实现文件(.cpp)、库链接文件(.so)等。为不同的第三方建立同名文件夹库函数来管理各个库函数。OpenHarmony如何集成、编译和链接导入的第三方库。总结OpenHarmony设备的开发,保持C++的面向对象特性和语言特性:1.面向对象的三原则(封装、继承、多态)。2.C++语言API(智能指针、lambda、类型推导等)。熟悉OpenHarmony设备开发的整体逻辑和C++语言,了解进程间通信技术、远程调用等技术后,更容易上手OpenHarmony设备开发。OpenHarmony的应用开发,虽然从前端开发的写作上有了不小的变化。前端使用(HTMLCSSJS),但还是一样的三个流程:1.构建页面结构2.绘制页面样式3.添加事件OpenHarmony应用开发的语法和本地API,您可以在较短的时间内掌握OpenHarmony应用开发。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。