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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開(kāi)發(fā)【應(yīng)用開(kāi)發(fā)基礎(chǔ)知識(shí)】

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

應(yīng)用開(kāi)發(fā)介紹

1. 項(xiàng)目說(shuō)明

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

2. 主要功能

  • 目錄標(biāo)題展示,目錄列表展示
  • 點(diǎn)擊目錄列表,查看列表內(nèi)容
  • 點(diǎn)擊目錄標(biāo)題的返回箭頭,返回之前的內(nèi)容
  • 頁(yè)面內(nèi)容溢出,可上下滑動(dòng)查看內(nèi)容

3. 效果展示

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

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

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

參閱應(yīng)用開(kāi)發(fā)文檔—工具

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

5. 創(chuàng)建項(xiàng)目

搭建開(kāi)發(fā)環(huán)境后,創(chuàng)建項(xiàng)目,了解項(xiàng)目結(jié)構(gòu)。

  • 掌握OpenHarmony應(yīng)用的一些基本概念:
    UI框架的簡(jiǎn)單說(shuō)明(方舟開(kāi)發(fā)框架(ArkUI框架))
    ——類Web開(kāi)發(fā)范式(JS)
    ——聲明式開(kāi)發(fā)范式(eTS)
    Ability的基本概念(應(yīng)用所具備能力的抽象)
    ——FA模型
    ——Stage模型
    
  • 應(yīng)用包結(jié)構(gòu):FA模型結(jié)構(gòu)、Stage模型結(jié)構(gòu)

項(xiàng)目的目錄結(jié)構(gòu):

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

  • AppScope > app.json5 :應(yīng)用的全局配置信息。
  • entry :OpenHarmony工程模塊,編譯構(gòu)建生成一個(gè)HAP包。
    • src > main > ets :用于存放ets源碼。
    • src > main > ets > Application > AbilityStage.ts :實(shí)現(xiàn)AbilityStage接口
    • src > main > ets > MainAbility :應(yīng)用/服務(wù)的入口。
    • src > main > ets > MainAbility > MainAbility.ts :承載Ability生命周期。
    • src > main > ets > pages :MainAbility包含的頁(yè)面。
    • src > main > resources :用于存放應(yīng)用/服務(wù)所用到的資源文件,如圖形、多媒體、字符串、布局文件等。關(guān)于資源文件,詳見(jiàn)資源文件的分類。
    • src > main > module.json5 :模塊配置文件。主要包含HAP包的配置信息、應(yīng)用/服務(wù)在具體設(shè)備上的配置信息以及應(yīng)用/服務(wù)的全局配置信息。
    • build-profile.json5 :當(dāng)前的模塊信息 、編譯信息配置項(xiàng),包括buildOption、targets配置等。
    • hvigorfile.js :模塊級(jí)編譯構(gòu)建任務(wù)腳本,開(kāi)發(fā)者可以自定義相關(guān)任務(wù)和代碼實(shí)現(xiàn)。
  • build-profile.json5 :應(yīng)用級(jí)配置信息,包括簽名、產(chǎn)品配置等。
  • hvigorfile.js :應(yīng)用級(jí)編譯構(gòu)建任務(wù)腳本。

6. 編寫(xiě)應(yīng)用

本文所編寫(xiě)的應(yīng)用是特別基礎(chǔ)的內(nèi)容

6.1 定義組件結(jié)構(gòu)

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

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

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

6.2 繪制組件UI

組件結(jié)構(gòu)編寫(xiě)完成,根據(jù)需求開(kāi)始繪制組件UI界面

build() {
    // Columns沿垂直方向布局的容器
    Column() {
      // 引入的自定義組件  
      TitleBar({ title: this.title, isShowReturn: this.isShowReturn })
      // List包含一系列相同寬度的列表項(xiàng)。適合連續(xù)、多行呈現(xiàn)同類數(shù)據(jù) 
      List() {
        // ForEach渲染控制語(yǔ)法,循環(huán)渲染  
        ForEach(this.items, (each) = > {
          ListItem() {
            Row() {
              // 基礎(chǔ)文本組件,顯示一段文本的組件  
              Text(each.name)
                .fontSize(20)
                
              // 基礎(chǔ)圖片組件,支持本地圖片和網(wǎng)絡(luò)圖片的渲染展示 
              Image($r('app.media.arrow'))
                .padding(8)
                .width(40)
            }
            .width('100%')
            .justifyContent(FlexAlign.SpaceBetween)
            .padding(10)
          }
          // 綁定通用點(diǎn)擊事件  
          .onClick(() = > {
            ...
          })
        })
      }
    }
    // 設(shè)置通用屬性,寬(width)高(height)            
    .width('100%')
    .height('100%')
  }

6.3 添加交互邏輯

界面UI繪制完善后,接下來(lái)使用自定義組件的生命周期aboutToAppear回調(diào)函數(shù),編寫(xiě)界面數(shù)據(jù)初始化的邏輯,并把界面上的交互邏輯編寫(xiě)完整。

// 編寫(xiě)界面數(shù)據(jù)初始化的邏輯,aboutToAppear函數(shù)在創(chuàng)建自定義組件的新實(shí)例后,在執(zhí)行其build函數(shù)之前執(zhí)行
aboutToAppear() {
    let routerParams = router.getParams();
    // 條件判斷: routerParams==undefined為一級(jí)目錄界面
    if (routerParams == undefined) {
    ...
    // 條件判斷: routerParams!==undefined則為二級(jí)目錄界面    
    } else {
    ...
    }
}
     
build(){
  ...
   Row() {
      ...
   }   
  // 編寫(xiě)點(diǎn)擊事件的邏輯  
  .onClick(() = > {
    // 條件判斷: each.children === undefined,點(diǎn)擊的目錄列表無(wú)子目錄
    if (each.children === undefined) {
         router.push({
         url: each.path,
         params: {
         title: each.name
           }
         })
        // 條件判斷: each.children === undefined,點(diǎn)擊的目錄列表有子目錄
        } else {
         router.push({
         url: each.path,
         params: {
             title: each.name,
             items: each.children
           }
         })
       }
    })
   ... 
}

6.4 測(cè)試效果

完成應(yīng)用編寫(xiě)后,利用DevEco Studio 的Previewer提供的預(yù)覽效果,測(cè)試應(yīng)用的運(yùn)行效果是否符合預(yù)期效果。

7. 項(xiàng)目復(fù)盤(pán)

在編寫(xiě)OpenHarmony應(yīng)用的過(guò)程中,踩了一些坑,總結(jié)下來(lái)有如下幾點(diǎn):

  1. 對(duì)eTS聲明式范式開(kāi)發(fā)自定義組件生疏,編寫(xiě)應(yīng)用的時(shí)候,梳理清楚邏輯后,難以順暢的編寫(xiě)成代碼。
  2. DevEco Studio 的Previewer可能會(huì)因?yàn)榫彺嬖斐深A(yù)覽效果出錯(cuò)。
    例如:新增了一個(gè)自定義組件,并同時(shí)設(shè)置了點(diǎn)擊跳轉(zhuǎn)到新增自定義組件的事件,但在Previewer中點(diǎn)擊后,無(wú)響應(yīng)。
    #打卡不停更# - OpenHarmony/docs開(kāi)發(fā)入門(mén)-鴻蒙開(kāi)發(fā)者社區(qū)

解決方案:

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

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

其他

  • third-party-components

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

總結(jié)

  • OpenHarmony設(shè)備開(kāi)發(fā),保持了C++面向?qū)ο蟮奶匦约罢Z(yǔ)言的特點(diǎn):
    1. 面向?qū)ο笕笤瓌t(封裝、繼承、多態(tài))
    2. C++語(yǔ)言API(智能指針、lambda、類型推導(dǎo)等)

? 熟悉OpenHarmony設(shè)備開(kāi)發(fā)的整體邏輯和C++語(yǔ)言后,了解進(jìn)程間的通信技術(shù),遠(yuǎn)程調(diào)用等技術(shù),可以更容易的上手OpenHarmony的設(shè)備開(kāi)發(fā)。

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

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

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

    關(guān)注

    183

    文章

    2627

    瀏覽量

    65783
  • 鴻蒙
    +關(guān)注

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42485
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

    15736
  • 鴻蒙星河
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    27
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux應(yīng)用程序開(kāi)發(fā)_基礎(chǔ)知識(shí)

    Linux應(yīng)用程序開(kāi)發(fā)_基礎(chǔ)知識(shí)
    發(fā)表于 08-16 16:32

    嵌入式linux系統(tǒng)開(kāi)發(fā)基礎(chǔ)知識(shí)介紹

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

    請(qǐng)問(wèn)開(kāi)發(fā)微信小程序之前需要有哪些基礎(chǔ)知識(shí)?

    開(kāi)發(fā)微信小程序之前需要有哪些基礎(chǔ)知識(shí)?我想開(kāi)發(fā)微信小程序,但是不知道從何入手,也不知道開(kāi)發(fā)小程序之前應(yīng)該學(xué)習(xí)哪些知識(shí)?
    發(fā)表于 05-21 23:21

    【資料】HarmonyOS開(kāi)發(fā)必備基礎(chǔ)知識(shí)

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

    Linux應(yīng)用開(kāi)發(fā)基礎(chǔ)知識(shí)

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

    嵌入式linux應(yīng)用開(kāi)發(fā)基礎(chǔ)知識(shí)

    :嵌入式linux應(yīng)用開(kāi)發(fā)基礎(chǔ)知識(shí) BV1kk4y117Tu第5篇:嵌入式linux驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ)知識(shí) BV14f4y1Q7ti第6篇:項(xiàng)目實(shí)戰(zhàn) BV1it4y1Q75z第7篇:驅(qū)動(dòng)大全
    發(fā)表于 12-24 08:18

    Blackfin應(yīng)用程序開(kāi)發(fā)基礎(chǔ)知識(shí)

    Blackfin應(yīng)用程序開(kāi)發(fā)基礎(chǔ)知識(shí) 第一章:簡(jiǎn)介第1a節(jié):課程安排第二章:VisualDSP++構(gòu)建流程第2a節(jié):C代碼導(dǎo)入概述第2b章:編譯器基礎(chǔ)知識(shí)第2c節(jié):連
    發(fā)表于 01-08 15:04 ?0次下載

    《ASP.NET 2.0網(wǎng)絡(luò)開(kāi)發(fā)技術(shù)》 Web開(kāi)發(fā)基礎(chǔ)知識(shí)

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

    關(guān)于AVR開(kāi)發(fā)基礎(chǔ)知識(shí)的介紹

    AVR開(kāi)發(fā)基礎(chǔ)知識(shí)
    的頭像 發(fā)表于 07-10 03:56 ?1988次閱讀
    關(guān)于AVR<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>基礎(chǔ)知識(shí)</b>的介紹

    OpenVINO開(kāi)發(fā)配置應(yīng)必備哪些基礎(chǔ)知識(shí)

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

    Linux用戶態(tài)開(kāi)發(fā)驅(qū)動(dòng)教程及基礎(chǔ)知識(shí)

    Linux用戶態(tài)開(kāi)發(fā)驅(qū)動(dòng)教程及基礎(chǔ)知識(shí)
    發(fā)表于 07-14 10:06 ?7次下載

    嵌入式開(kāi)發(fā)系統(tǒng)基礎(chǔ)知識(shí)

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

    鴻蒙開(kāi)發(fā)之ArkTS基礎(chǔ)知識(shí)

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

    鴻蒙開(kāi)發(fā)【設(shè)備開(kāi)發(fā)基礎(chǔ)知識(shí)

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

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

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