0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发【应用开发基础知识】

jf_46214456 2024-01-29 18:46 次阅读

应用开发介绍

1. 项目说明

通过OpenHarmony提供的Stage模型和ArkUI的eTS声明式开发规范,结合简单的Demo,分享学习OpenHarmony/docs/application-dev

2. 主要功能

  • 目录标题展示,目录列表展示
  • 点击目录列表,查看列表内容
  • 点击目录标题的返回箭头,返回之前的内容
  • 页面内容溢出,可上下滑动查看内容

3. 效果展示

#打卡不停更# - OpenHarmony/docs开发入门-鸿蒙开发者社区

4. 开发环境搭建

首先需要搭建好开发环境。

参阅应用开发文档—工具

  • 下载[HUAWEI DevEco Studio For OpenHarmony](简称DevEco Studio)
  • [配置开发环境]

5. 创建项目

搭建开发环境后,创建项目,了解项目结构。

  • 掌握OpenHarmony应用的一些基本概念:
    UI框架的简单说明(方舟开发框架(ArkUI框架))
    ——类Web开发范式(JS)
    ——声明式开发范式(eTS)
    Ability的基本概念(应用所具备能力的抽象)
    ——FA模型
    ——Stage模型
    
  • 应用包结构:FA模型结构、Stage模型结构

项目的目录结构:

#打卡不停更# - OpenHarmony/docs开发入门-鸿蒙开发者社区

  • AppScope > app.json5 :应用的全局配置信息
  • entry :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. 编写应用

本文所编写的应用是特别基础的内容

6.1 定义组件结构

创建好项目后,开始编写自定义组件,引入需要的文件,定义需要使用的变量,再添加上组件会使用到的生命周期函数和build方法。

// 引用需要的组件和API
import TitleBar from './components/titleBar'
import router from '@ohos.router';

// @Entry装饰的自定义组件用作页面的默认入口组件,加载页面时,将首先创建并呈现@Entry装饰的自定义组件。
@Entry
// @Component装饰的struct表示该结构体具有组件化能力,能够成为一个独立的组件,这种类型的组件也称为自定义组件
@Component
struct Index {
  // @State装饰的变量是组件内部的状态数据,当这些状态数据被修改时,将会调用所在组件的build方法进行UI刷新
  @State title: string = 'UI组件'
  @State isShowReturn: boolean = false
  items: Array< Item > = []
  
  // 函数在创建自定义组件的新实例后,在执行其build函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build函数中生效。  
  aboutToAppear() {
      ...
  }
   
  // build方法里描述UI结构
  build() {
      ...
  }
}

6.2 绘制组件UI

组件结构编写完成,根据需求开始绘制组件UI界面

build() {
    // Columns沿垂直方向布局的容器
    Column() {
      // 引入的自定义组件  
      TitleBar({ title: this.title, isShowReturn: this.isShowReturn })
      // List包含一系列相同宽度的列表项。适合连续、多行呈现同类数据 
      List() {
        // ForEach渲染控制语法,循环渲染  
        ForEach(this.items, (each) = > {
          ListItem() {
            Row() {
              // 基础文本组件,显示一段文本的组件  
              Text(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%')
  }

6.3 添加交互逻辑

界面UI绘制完善后,接下来使用自定义组件的生命周期aboutToAppear回调函数,编写界面数据初始化的逻辑,并把界面上的交互逻辑编写完整。

// 编写界面数据初始化的逻辑,aboutToAppear函数在创建自定义组件的新实例后,在执行其build函数之前执行
aboutToAppear() {
    let routerParams = 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
           }
         })
       }
    })
   ... 
}

6.4 测试效果

完成应用编写后,利用DevEco Studio 的Previewer提供的预览效果,测试应用的运行效果是否符合预期效果。

7. 项目复盘

在编写OpenHarmony应用的过程中,踩了一些坑,总结下来有如下几点:

  1. 对eTS声明式范式开发自定义组件生疏,编写应用的时候,梳理清楚逻辑后,难以顺畅的编写成代码。
  2. DevEco Studio 的Previewer可能会因为缓存造成预览效果出错。
    例如:新增了一个自定义组件,并同时设置了点击跳转到新增自定义组件的事件,但在Previewer中点击后,无响应。
    #打卡不停更# - OpenHarmony/docs开发入门-鸿蒙开发者社区

解决方案:

  1. 在gitee上搜索OpenHarmony应用,可检索到许多开发者上传的OpenHarmony应用,下载源码,模仿代码编写,
    同时查看文档,保证理解每一行代码。
  2. 检测代码是否编写正确,如果代码正确,则通过DevEco Studio的Build下的Clean Project清理缓存。
    Clean Project示意图:

#打卡不停更# - OpenHarmony/docs开发入门-鸿蒙开发者社区

其他

  • third-party-components

第三方库文件存放目录。该目录统一管理第三方库的文件,例如:头文件(.h),实现文件(.cpp),库链接文件(.so)等。针对不同的第三方库功能创建同名文件夹来实现单独库功能的管理。OpenHarmony如何将引入的第三方库,融合,编译,链接。

总结

  • OpenHarmony设备开发,保持了C++面向对象的特性及语言的特点:
    1. 面向对象三大原则(封装、继承、多态)
    2. C++语言API(智能指针、lambda、类型推导等)

​ 熟悉OpenHarmony设备开发的整体逻辑和C++语言后,了解进程间的通信技术,远程调用等技术,可以更容易的上手OpenHarmony的设备开发。

  • OpenHarmony应用开发,虽然和前端开发在写法上有了相当大的变化,前端是运用(HTML CSS JS),但仍旧有同样的三个过程:
    1. 搭建页面结构
    2. 绘制页面样式
    3. 添加事件交互
    明白程序开发的流程后,在熟悉OpenHarmony应用开发的语法和本地API后,能在较短的时间内掌握OpenHarmony的应用开发。

u=3903065816,495506185&fm=253&fmt=auto&app=120&f=JPEG.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙系统
    +关注

    关注

    183

    文章

    2634

    浏览量

    66298
  • 鸿蒙
    +关注

    关注

    57

    文章

    2335

    浏览量

    42794
  • OpenHarmony
    +关注

    关注

    25

    文章

    3710

    浏览量

    16243
  • 鸿蒙星河
    +关注

    关注

    0

    文章

    8

    浏览量

    32
收藏 人收藏

    评论

    相关推荐

    Linux应用程序开发_基础知识

    Linux应用程序开发_基础知识
    发表于 08-16 16:32

    嵌入式linux系统开发基础知识介绍

    嵌入式linux系统开发基础知识介绍
    发表于 08-17 15:38

    请问开发微信小程序之前需要有哪些基础知识

    开发微信小程序之前需要有哪些基础知识?我想开发微信小程序,但是不知道从何入手,也不知道开发小程序之前应该学习哪些知识
    发表于 05-21 23:21

    【资料】HarmonyOS开发必备基础知识

    HarmonyOS开发必备基础知识回复帖子查看资料下载链接:[hide][/hide]
    发表于 08-12 11:47

    Linux应用开发基础知识

    应用开发基础知识#include #include #include #include int main(int argc, char *argv[]){int fd = 0;char
    发表于 11-04 08:32

    嵌入式linux应用开发基础知识

    :嵌入式linux应用开发基础知识 BV1kk4y117Tu第5篇:嵌入式linux驱动开发基础知识 BV14f4y1Q7ti第6篇:项目实战 BV1it4y1Q75z第7篇:驱动大全
    发表于 12-24 08:18

    Blackfin应用程序开发基础知识

    Blackfin应用程序开发基础知识 第一章:简介第1a节:课程安排第二章:VisualDSP++构建流程第2a节:C代码导入概述第2b章:编译器基础知识第2c节:连
    发表于 01-08 15:04 0次下载

    《ASP.NET 2.0网络开发技术》 Web开发基础知识

    《ASP.NET 2.0网络开发技术》 Web开发基础知识
    发表于 02-07 15:05 0次下载

    关于AVR开发基础知识的介绍

    AVR开发基础知识
    的头像 发表于 07-10 03:56 2078次阅读
    关于AVR<b class='flag-5'>开发</b><b class='flag-5'>基础知识</b>的介绍

    OpenVINO开发配置应必备哪些基础知识

    通过第一篇文章我们已经了解什么是OpenVINO,它的诸多功能与全应用场景支持人工智能落地的能力。本篇我们将重点介绍OpenVINO开发流程与开发必备的基础知识与相关API函数对象。 环境配置 在
    的头像 发表于 05-18 09:10 1814次阅读
    OpenVINO<b class='flag-5'>开发</b>配置应必备哪些<b class='flag-5'>基础知识</b>?

    Linux用户态开发驱动教程及基础知识

    Linux用户态开发驱动教程及基础知识
    发表于 07-14 10:06 7次下载

    嵌入式开发系统基础知识

    电子发烧友网站提供《嵌入式开发系统基础知识.pdf》资料免费下载
    发表于 11-17 10:59 11次下载
    嵌入式<b class='flag-5'>开发</b>系统<b class='flag-5'>基础知识</b>

    鸿蒙开发之ArkTS基础知识

    一、ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配了鸿蒙的ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以
    的头像 发表于 01-24 16:44 2222次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>之ArkTS<b class='flag-5'>基础知识</b>

    鸿蒙开发【设备开发基础知识

    鸿蒙开发基础知识讲解
    的头像 发表于 01-29 18:44 1001次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>【设备<b class='flag-5'>开发</b><b class='flag-5'>基础知识</b>】

    使用 Taro 开发鸿蒙原生应用 —— 快速上手,鸿蒙应用开发指南

    随着鸿蒙系统的不断完善,许多应用厂商都希望将自己的应用移植到鸿蒙平台上。最近,Taro 发布了 v4.0.0-beta.x 版本,支持使用 Taro 快速开发鸿蒙原生应用,也可将现有的
    的头像 发表于 02-02 16:09 848次阅读
    使用 Taro <b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b>原生应用 —— 快速上手,<b class='flag-5'>鸿蒙</b>应用<b class='flag-5'>开发</b>指南