0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發(fā)【應用開發(fā)基礎知識】

jf_46214456 ? 2024-01-29 18:46 ? 次閱讀

應用開發(fā)介紹

1. 項目說明

通過OpenHarmony提供的Stage模型和ArkUI的eTS聲明式開發(fā)規(guī)范,結合簡單的Demo,分享學習OpenHarmony/docs/application-dev

2. 主要功能

  • 目錄標題展示,目錄列表展示
  • 點擊目錄列表,查看列表內容
  • 點擊目錄標題的返回箭頭,返回之前的內容
  • 頁面內容溢出,可上下滑動查看內容

3. 效果展示

#打卡不停更# - OpenHarmony/docs開發(fā)入門-鴻蒙開發(fā)者社區(qū)

4. 開發(fā)環(huán)境搭建

首先需要搭建好開發(fā)環(huán)境。

參閱應用開發(fā)文檔—工具

  • 下載[HUAWEI DevEco Studio For OpenHarmony](簡稱DevEco Studio)
  • [配置開發(fā)環(huán)境]

5. 創(chuàng)建項目

搭建開發(fā)環(huán)境后,創(chuàng)建項目,了解項目結構。

  • 掌握OpenHarmony應用的一些基本概念:
    UI框架的簡單說明(方舟開發(fā)框架(ArkUI框架))
    ——類Web開發(fā)范式(JS)
    ——聲明式開發(fā)范式(eTS)
    Ability的基本概念(應用所具備能力的抽象)
    ——FA模型
    ——Stage模型
    
  • 應用包結構:FA模型結構、Stage模型結構

項目的目錄結構:

#打卡不停更# - OpenHarmony/docs開發(fā)入門-鴻蒙開發(fā)者社區(qū)

  • AppScope > app.json5 :應用的全局配置信息。
  • entry :OpenHarmony工程模塊,編譯構建生成一個HAP包。
    • src > main > ets :用于存放ets源碼。
    • src > main > ets > Application > AbilityStage.ts :實現(xiàn)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 :模塊級編譯構建任務腳本,開發(fā)者可以自定義相關任務和代碼實現(xiàn)。
  • build-profile.json5 :應用級配置信息,包括簽名、產(chǎn)品配置等。
  • hvigorfile.js :應用級編譯構建任務腳本。

6. 編寫應用

本文所編寫的應用是特別基礎的內容

6.1 定義組件結構

創(chuàng)建好項目后,開始編寫自定義組件,引入需要的文件,定義需要使用的變量,再添加上組件會使用到的生命周期函數(shù)和build方法。

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

// @Entry裝飾的自定義組件用作頁面的默認入口組件,加載頁面時,將首先創(chuàng)建并呈現(xiàn)@Entry裝飾的自定義組件。
@Entry
// @Component裝飾的struct表示該結構體具有組件化能力,能夠成為一個獨立的組件,這種類型的組件也稱為自定義組件
@Component
struct Index {
  // @State裝飾的變量是組件內部的狀態(tài)數(shù)據(jù),當這些狀態(tài)數(shù)據(jù)被修改時,將會調用所在組件的build方法進行UI刷新
  @State title: string = 'UI組件'
  @State isShowReturn: boolean = false
  items: Array< Item > = []
  
  // 函數(shù)在創(chuàng)建自定義組件的新實例后,在執(zhí)行其build函數(shù)之前執(zhí)行。允許在aboutToAppear函數(shù)中改變狀態(tài)變量,更改將在后續(xù)執(zhí)行build函數(shù)中生效。  
  aboutToAppear() {
      ...
  }
   
  // build方法里描述UI結構
  build() {
      ...
  }
}

6.2 繪制組件UI

組件結構編寫完成,根據(jù)需求開始繪制組件UI界面

build() {
    // Columns沿垂直方向布局的容器
    Column() {
      // 引入的自定義組件  
      TitleBar({ title: this.title, isShowReturn: this.isShowReturn })
      // List包含一系列相同寬度的列表項。適合連續(xù)、多行呈現(xiàn)同類數(shù)據(jù) 
      List() {
        // ForEach渲染控制語法,循環(huán)渲染  
        ForEach(this.items, (each) = > {
          ListItem() {
            Row() {
              // 基礎文本組件,顯示一段文本的組件  
              Text(each.name)
                .fontSize(20)
                
              // 基礎圖片組件,支持本地圖片和網(wǎng)絡圖片的渲染展示 
              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回調函數(shù),編寫界面數(shù)據(jù)初始化的邏輯,并把界面上的交互邏輯編寫完整。

// 編寫界面數(shù)據(jù)初始化的邏輯,aboutToAppear函數(shù)在創(chuàng)建自定義組件的新實例后,在執(zhí)行其build函數(shù)之前執(zhí)行
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聲明式范式開發(fā)自定義組件生疏,編寫應用的時候,梳理清楚邏輯后,難以順暢的編寫成代碼。
  2. DevEco Studio 的Previewer可能會因為緩存造成預覽效果出錯。
    例如:新增了一個自定義組件,并同時設置了點擊跳轉到新增自定義組件的事件,但在Previewer中點擊后,無響應。
    #打卡不停更# - OpenHarmony/docs開發(fā)入門-鴻蒙開發(fā)者社區(qū)

解決方案:

  1. 在gitee上搜索OpenHarmony應用,可檢索到許多開發(fā)者上傳的OpenHarmony應用,下載源碼,模仿代碼編寫,
    同時查看文檔,保證理解每一行代碼。
  2. 檢測代碼是否編寫正確,如果代碼正確,則通過DevEco Studio的Build下的Clean Project清理緩存。
    Clean Project示意圖:

#打卡不停更# - OpenHarmony/docs開發(fā)入門-鴻蒙開發(fā)者社區(qū)

其他

  • third-party-components

第三方庫文件存放目錄。該目錄統(tǒng)一管理第三方庫的文件,例如:頭文件(.h),實現(xiàn)文件(.cpp),庫鏈接文件(.so)等。針對不同的第三方庫功能創(chuàng)建同名文件夾來實現(xiàn)單獨庫功能的管理。OpenHarmony如何將引入的第三方庫,融合,編譯,鏈接。

總結

  • OpenHarmony設備開發(fā),保持了C++面向對象的特性及語言的特點:
    1. 面向對象三大原則(封裝、繼承、多態(tài))
    2. C++語言API(智能指針、lambda、類型推導等)

? 熟悉OpenHarmony設備開發(fā)的整體邏輯和C++語言后,了解進程間的通信技術,遠程調用等技術,可以更容易的上手OpenHarmony的設備開發(fā)。

  • OpenHarmony應用開發(fā),雖然和前端開發(fā)在寫法上有了相當大的變化,前端是運用(HTML CSS JS),但仍舊有同樣的三個過程:
    1. 搭建頁面結構
    2. 繪制頁面樣式
    3. 添加事件交互
    明白程序開發(fā)的流程后,在熟悉OpenHarmony應用開發(fā)的語法和本地API后,能在較短的時間內掌握OpenHarmony的應用開發(fā)。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙系統(tǒng)

    關注

    183

    文章

    2634

    瀏覽量

    66355
  • 鴻蒙
    +關注

    關注

    57

    文章

    2352

    瀏覽量

    42863
  • OpenHarmony
    +關注

    關注

    25

    文章

    3722

    瀏覽量

    16323
  • 鴻蒙星河
    +關注

    關注

    0

    文章

    8

    瀏覽量

    46
收藏 人收藏

    評論

    相關推薦

    Linux應用程序開發(fā)_基礎知識

    Linux應用程序開發(fā)_基礎知識
    發(fā)表于 08-16 16:32

    嵌入式linux系統(tǒng)開發(fā)基礎知識介紹

    嵌入式linux系統(tǒng)開發(fā)基礎知識介紹
    發(fā)表于 08-17 15:38

    請問開發(fā)微信小程序之前需要有哪些基礎知識

    開發(fā)微信小程序之前需要有哪些基礎知識?我想開發(fā)微信小程序,但是不知道從何入手,也不知道開發(fā)小程序之前應該學習哪些知識
    發(fā)表于 05-21 23:21

    【資料】HarmonyOS開發(fā)必備基礎知識

    HarmonyOS開發(fā)必備基礎知識回復帖子查看資料下載鏈接:[hide][/hide]
    發(fā)表于 08-12 11:47

    Linux應用開發(fā)基礎知識

    應用開發(fā)基礎知識#include #include #include #include int main(int argc, char *argv[]){int fd = 0;char
    發(fā)表于 11-04 08:32

    嵌入式linux應用開發(fā)基礎知識

    :嵌入式linux應用開發(fā)基礎知識 BV1kk4y117Tu第5篇:嵌入式linux驅動開發(fā)基礎知識 BV14f4y1Q7ti第6篇:項目實戰(zhàn) BV1it4y1Q75z第7篇:驅動大全
    發(fā)表于 12-24 08:18

    Blackfin應用程序開發(fā)基礎知識

    Blackfin應用程序開發(fā)基礎知識 第一章:簡介第1a節(jié):課程安排第二章:VisualDSP++構建流程第2a節(jié):C代碼導入概述第2b章:編譯器基礎知識第2c節(jié):連
    發(fā)表于 01-08 15:04 ?0次下載

    《ASP.NET 2.0網(wǎng)絡開發(fā)技術》 Web開發(fā)基礎知識

    《ASP.NET 2.0網(wǎng)絡開發(fā)技術》 Web開發(fā)基礎知識
    發(fā)表于 02-07 15:05 ?0次下載

    關于AVR開發(fā)基礎知識的介紹

    AVR開發(fā)基礎知識
    的頭像 發(fā)表于 07-10 03:56 ?2092次閱讀
    關于AVR<b class='flag-5'>開發(fā)</b><b class='flag-5'>基礎知識</b>的介紹

    OpenVINO開發(fā)配置應必備哪些基礎知識?

    通過第一篇文章我們已經(jīng)了解什么是OpenVINO,它的諸多功能與全應用場景支持人工智能落地的能力。本篇我們將重點介紹OpenVINO開發(fā)流程與開發(fā)必備的基礎知識與相關API函數(shù)對象。 環(huán)境配置 在
    的頭像 發(fā)表于 05-18 09:10 ?1834次閱讀
    OpenVINO<b class='flag-5'>開發(fā)</b>配置應必備哪些<b class='flag-5'>基礎知識</b>?

    Linux用戶態(tài)開發(fā)驅動教程及基礎知識

    Linux用戶態(tài)開發(fā)驅動教程及基礎知識
    發(fā)表于 07-14 10:06 ?7次下載

    嵌入式開發(fā)系統(tǒng)基礎知識

    電子發(fā)燒友網(wǎng)站提供《嵌入式開發(fā)系統(tǒng)基礎知識.pdf》資料免費下載
    發(fā)表于 11-17 10:59 ?11次下載
    嵌入式<b class='flag-5'>開發(fā)</b>系統(tǒng)<b class='flag-5'>基礎知識</b>

    鴻蒙開發(fā)之ArkTS基礎知識

    一、ArkTS簡介 ArkTS是HarmonyOS優(yōu)選的主力應用開發(fā)語言。它在TypeScript(簡稱TS)的基礎上,匹配了鴻蒙的ArkUI框架,擴展了聲明式UI、狀態(tài)管理等相應的能力,讓開發(fā)者以
    的頭像 發(fā)表于 01-24 16:44 ?2268次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>之ArkTS<b class='flag-5'>基礎知識</b>

    鴻蒙開發(fā)【設備開發(fā)基礎知識

    鴻蒙開發(fā)基礎知識講解
    的頭像 發(fā)表于 01-29 18:44 ?1023次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>【設備<b class='flag-5'>開發(fā)</b><b class='flag-5'>基礎知識</b>】

    使用 Taro 開發(fā)鴻蒙原生應用 —— 快速上手,鴻蒙應用開發(fā)指南

    隨著鴻蒙系統(tǒng)的不斷完善,許多應用廠商都希望將自己的應用移植到鴻蒙平臺上。最近,Taro 發(fā)布了 v4.0.0-beta.x 版本,支持使用 Taro 快速開發(fā)鴻蒙原生應用,也可將現(xiàn)有的
    的頭像 發(fā)表于 02-02 16:09 ?881次閱讀
    使用 Taro <b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b>原生應用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應用<b class='flag-5'>開發(fā)</b>指南