Advertisement

开源鸿蒙OpenHarmony开发入门

阅读量:

本文介绍了如何使用OpenHarmony的ArkTS开发框架快速开发一个简单的应用。内容涵盖以下要点:
工具准备:安装DevEco Studio并完成开发环境配置。
构建第一个页面:通过编辑页面代码实现基本功能,如添加文本和按钮,设置按钮样式并实现跳转功能。
页面跳转:使用页面路由模块实现页面间的跳转,支持前向和后向操作。
应用运行:指导用户在真机上连接开发板并完成签名和运行步骤。
总结了构建第一个ArkTS应用的关键步骤,包括页面构建、按钮功能和页面跳转,帮助开发者快速上手应用开发。

开发准备

面向OpenHarmony应用开发的初学者,本文档提供一个基础的开发入门资料。通过搭建一个简单的包含页面跳转和返回功能的应用(如下图所示),可以快速熟悉工程目录的主要文件结构,掌握OpenHarmony的应用开发流程。

zh-cn_image_0000001364254729

在开始之前,建议您先了解OpenHarmony应用的核心概念:对UI框架的简要说明,以及对应用模型的简要说明。

基本概念

UI框架

OpenHarmony提供了方舟开发框架(ArkUI框架),这是一种专为开发者设计的UI开发工具。方舟开发框架为开发者提供了丰富的功能,包括多种组件、布局计算、动画能力、UI交互以及绘制功能。

方舟开发框架为开发者提供了两种开发范式,分别是基于ArkTS的声明式开发范式和兼容JS的类Web开发范式。对两种开发范式进行了简单对比分析。

开发范式名称 语言生态 UI更新方式 适用场景 适用人群
声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员
类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端开发人员

丰富的UI框架开发内容与指导,详见UI开发

应用模型

应用模型是OpenHarmony为开发者服务的抽象提炼,为应用程序开发提供了必要的组件和运行机制。有了应用模型,开发者可以基于统一的应用模型进行开发,使应用开发更加简便和高效。请参考应用模型的构成要素

随着系统的演进发展,OpenHarmony先后提供了两种应用模型:

Stage模型:

FA(Feature Ability)模型: 自OpenHarmony API 7起支持的模型,已不再作为重点推广。开发详情可参考FA模型开发概述。在快速入门章节,该模型的相关开发内容不再进行详细指导。

FA模型与Stage模型在整体架构与设计思路上的主要区别,具体分析请参考应用模型解读

快速入门部分包含两个示例页面,并基于Stage模型构建第一个实例,作为第一个实例,以便开发者掌握基本概念和应用开发流程。

工具准备

安装最新版本的 DevEco Studio,访问 这个链接

安装最新版本的 DevEco Studio,访问 这个链接

请参考以下链接:配置开发环境,请完成DevEco Studio的安装,并按照文档指引配置开发环境。

在完成上述操作和理解基本概念之后,即可参考构建第一个ArkTS应用(Stage模型)进一步体验和学习。

构建第一个ArkTS应用(Stage模型)

出乎意料地比 asio 性能表现出色,我想这得益于其简单的设计和简洁的代码。

说明 为确保运行效果 本文以DevEco Studio 4.1 Beta1版本为例 点击此处获取下载链接

创建ArkTS工程

当首次启动DevEco Studio时,您需要启动Create Project对话框以生成工程文件。如果当前已经存在一个工程,则在菜单栏依次选择File > New > Create Project对话框来生成新工程。

在开发过程中,我们采用Application 应用开发策略,选择模板“[OpenHarmony]Empty Ability ”,按照以下步骤完成配置:第一步,点击Next;第二步,按照提示完成后续操作。

进入配置工程界面,Compile SDK 选择“11 ”,其他参数保持默认设置即可。

Node 用于配置当前工程运行的 Node.js 版本,可以选择使用已有的 Node.js 或安装新的 Node.js 版本。

点击Finish ,工具会自动生成示例代码和相关资源,等待工程创建完成。

ArkTS工程目录结构(Stage模型)

AppScope变量值为app.json5,表示全局配置信息,详见app.json5配置文件

entry :OpenHarmony工程模块,编译构建生成一个HAP包。

src > main > ets:用于存放ArkTS源码。

src > main > ets > entryability:应用/服务的入口。

src > main > ets > pages:应用/服务包含的页面。

src > main > resources:用于存储应用/服务所需的各种资源文件,包括但不限于图形、多媒体、字符串、布局文件等。参考资源文件的分类

该模块配置文件主要包含HAP包的配置信息、应用/服务在不同设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,请参考module.json5配置文件

该模块的信息以及编译相关的配置参数,其中包含buildOption和targets配置等。

hvigorfile.ts :该模块负责编译构建任务,开发者可根据需求自定义相关任务和代码实现。

在编译过程中,启用混淆机制后,代码将被进行编译、混淆和压缩处理,从而保护代码安全。

oh_modules :用于存放三方库依赖信息。

build-profile.json5 是一种应用级配置文件,它包含了签名配置signingConfigs和产品配置products等信息。

hvigorfile.ts :应用级编译构建任务脚本。

构建第一个页面

使用文本组件。

在完成工程同步后,打开项目窗口,选择并执行路径“entry > src > main > ets > pages”,即可打开“Index.ets”文件,该文件由Text组件构成。

复制代码
        1. // Index.ets

    
        2. @Entry
    
        3. @Component
    
        4. struct Index {
    
        5.   @State message: string = 'Hello World';
    
        6.  
    
        7.   build() {
    
        8.     Row() {
    
        9.       Column() {
    
        10.         Text(this.message)
    
        11.           .fontSize(50)
    
        12.           .fontWeight(FontWeight.Bold)
    
        13.       }
    
        14.       .width('100%')
    
        15.     }
    
        16.     .height('100%')
    
        17.   }
    
        18. }
    
        19. ts

添加按钮。

基于默认页面,我们添加了一个Button组件用于响应用户点击事件,从而实现页面跳转。例如,Index.ets 文件的示例如下:

复制代码
        1. // Index.ets

    
        2. @Entry
    
        3. @Component
    
        4. struct Index {
    
        5.   @State message: string = 'Hello World';
    
        6.  
    
        7.   build() {
    
        8.     Row() {
    
        9.       Column() {
    
        10.         Text(this.message)
    
        11.           .fontSize(50)
    
        12.           .fontWeight(FontWeight.Bold)
    
        13.         // 添加按钮,以响应用户点击
    
        14.         Button() {
    
        15.           Text('Next')
    
        16.             .fontSize(30)
    
        17.             .fontWeight(FontWeight.Bold)
    
        18.         }
    
        19.         .type(ButtonType.Capsule)
    
        20.         .margin({
    
        21.           top: 20
    
        22.         })
    
        23.         .backgroundColor('#0D9FFB')
    
        24.         .width('40%')
    
        25.         .height('5%')
    
        26.       }
    
        27.       .width('100%')
    
        28.     }
    
        29.     .height('100%')
    
        30.   }
    
        31. }
    
        32. ts

在编辑器窗口的右上方侧边栏工具栏中,单击Previewer按钮,即可启动预览器。请看预览界面,第一个页面效果如图所示:

构建第二个页面

创建第二个页面。

在“Project”窗口中,打开位于“entry > src > main > ets”的文件夹。右键点击位于“pages”文件夹中的选项,选择创建一个新的ArkTS文件,并将其命名为“Second”文件。点击“Finish”按钮。展开后,您可以看到项目的文件目录结构如下:

用户在右键点击项目文件夹时,可以选择新建页面,无需额外配置相关路由。

在项目窗口中,打开 entry > src > main > resources > base > profile 文件夹。在 main_pages.json 文件的 src 标签中设置第二个页面的路由为 pages/Second。

复制代码
               1. {

        
               2.   "src": [
        
               3.     "pages/Index",
        
               4.     "pages/Second"
        
               5.   ]
        
               6. }
        
               7. json

添加文本及按钮。

参考第一个页面的布局和样式,在第二个页面中添加文本框组件、按钮组件等,并对它们进行样式设置。Second.ets文件的示例如下:

复制代码
        1. // Second.ets

    
        2. @Entry
    
        3. @Component
    
        4. struct Second {
    
        5.   @State message: string = 'Hi there';
    
        6.  
    
        7.   build() {
    
        8.     Row() {
    
        9.       Column() {
    
        10.         Text(this.message)
    
        11.           .fontSize(50)
    
        12.           .fontWeight(FontWeight.Bold)
    
        13.         Button() {
    
        14.           Text('Back')
    
        15.             .fontSize(25)
    
        16.             .fontWeight(FontWeight.Bold)
    
        17.         }
    
        18.         .type(ButtonType.Capsule)
    
        19.         .margin({
    
        20.           top: 20
    
        21.         })
    
        22.         .backgroundColor('#0D9FFB')
    
        23.         .width('40%')
    
        24.         .height('5%')
    
        25.       }
    
        26.       .width('100%')
    
        27.     }
    
        28.     .height('100%')
    
        29.   }
    
        30. }
    
        31. ts

实现页面间的跳转

支持页面路由router技术,可以实现页面间的导航功能。通过分析页面url,路由router能够精准定位目标页面,从而实现导航。建议在开发中导入router模块,以实现页面路由功能。

为了实现更优的转场效果等,建议参考Navigation

第一个页面跳转到第二个页面。

在第一个页面中,跳转按钮关联了点击事件,点击按钮后转到第二页。Index.ets文件的示例如下:

复制代码
        1. // Index.ets

    
        2. // 导入页面路由模块
    
        3. import router from '@ohos.router';
    
        4. import { BusinessError } from '@ohos.base';
    
        5.  
    
        6. @Entry
    
        7. @Component
    
        8. struct Index {
    
        9.   @State message: string = 'Hello World';
    
        10.  
    
        11.   build() {
    
        12.     Row() {
    
        13.       Column() {
    
        14.         Text(this.message)
    
        15.           .fontSize(50)
    
        16.           .fontWeight(FontWeight.Bold)
    
        17.         // 添加按钮,以响应用户点击
    
        18.         Button() {
    
        19.           Text('Next')
    
        20.             .fontSize(30)
    
        21.             .fontWeight(FontWeight.Bold)
    
        22.         }
    
        23.         .type(ButtonType.Capsule)
    
        24.         .margin({
    
        25.           top: 20
    
        26.         })
    
        27.         .backgroundColor('#0D9FFB')
    
        28.         .width('40%')
    
        29.         .height('5%')
    
        30.         // 跳转按钮绑定onClick事件,点击时跳转到第二页
    
        31.         .onClick(() => {
    
        32.           console.info(`Succeeded in clicking the 'Next' button.`)
    
        33.          // 跳转到第二页
    
        34.            router.pushUrl({ url: 'pages/Second' }).then(() => {
    
        35.              console.info('Succeeded in jumping to the second page.')
    
        36.            }).catch((err: BusinessError) => {
    
        37.              console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
    
        38.            })
    
        39.         })
    
        40.       }
    
        41.       .width('100%')
    
        42.     }
    
        43.     .height('100%')
    
        44.   }
    
        45. }
    
        46. ts

第二个页面返回到第一个页面。

在第二个页面中,返回按钮与onClick事件关联,点击按钮后转回首页。例如:‘Second.ets ’文件的示例如下。

复制代码
        1. // Second.ets

    
        2. // 导入页面路由模块
    
        3. import router from '@ohos.router';
    
        4. import { BusinessError } from '@ohos.base';
    
        5.  
    
        6. @Entry
    
        7. @Component
    
        8. struct Second {
    
        9.   @State message: string = 'Hi there';
    
        10.  
    
        11.   build() {
    
        12.     Row() {
    
        13.       Column() {
    
        14.         Text(this.message)
    
        15.           .fontSize(50)
    
        16.           .fontWeight(FontWeight.Bold)
    
        17.         Button() {
    
        18.           Text('Back')
    
        19.             .fontSize(25)
    
        20.             .fontWeight(FontWeight.Bold)
    
        21.         }
    
        22.         .type(ButtonType.Capsule)
    
        23.         .margin({
    
        24.           top: 20
    
        25.         })
    
        26.         .backgroundColor('#0D9FFB')
    
        27.         .width('40%')
    
        28.         .height('5%')
    
        29.         // 返回按钮绑定onClick事件,点击按钮时返回到第一页
    
        30.         .onClick(() => {
    
        31.           console.info(`Succeeded in clicking the 'Back' button.`)
    
        32.           try {
    
        33.             // 返回第一页
    
        34.             router.back()
    
        35.             console.info('Succeeded in returning to the first page.')
    
        36.           } catch (err) {
    
        37.              let code = (err as BusinessError).code;
    
        38.              let message = (err as BusinessError).message;
    
        39.             console.error(`Failed to return to the first page.Code is ${code}, message is ${message}`)
    
        40.           }
    
        41.         })
    
        42.       }
    
        43.       .width('100%')
    
        44.     }
    
        45.     .height('100%')
    
        46.   }
    
        47. }
    
        48. ts

打开Index.ets文件,点击预览器中的

按钮进行刷新。效果如下图所示:

使用真机运行应用

将搭载OpenHarmony标准系统的开发板与电脑连接。

在File菜单中点击“Project Structure对话框”,在界面对话框中勾选“Automatically generate signature”,等待自动签名完成即可,然后点击OK按钮。如图所示。

在编辑窗口右上角的工具栏,点击

按钮运行。效果如下图所示:

恭喜您使用ArkTS语言开发(Stage模型)成功完成了一个OpenHarmony应用。现在,您可以深入探索OpenHarmony的更多功能,访问这个链接

全部评论 (0)

还没有任何评论哟~