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

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

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

鴻蒙OS開發(fā)學(xué)習(xí):【第三方庫調(diào)用】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-14 11:34 ? 次閱讀

介紹

本篇Codelab主要向開發(fā)者展示了在Stage模型中,如何調(diào)用已經(jīng)上架到[三方庫中心]的社區(qū)庫和項(xiàng)目內(nèi)創(chuàng)建的本地庫。效果圖如下:

相關(guān)概念

  • [Navigation]:一般作為Page頁面的根容器,通過屬性設(shè)置來展示頁面的標(biāo)題、工具欄、菜單。
  • [Tabs]:一種可以通過頁簽進(jìn)行內(nèi)容視圖切換的容器組件,每個(gè)頁簽對應(yīng)一個(gè)內(nèi)容視圖。
  • [Canvas]:畫布組件,用于自定義繪制圖形。
  • [OpenHarmony 共享包]:OpenHarmony 共享包定義了特定的工程結(jié)構(gòu)和配置文件,支持OpenHarmony頁面組件相關(guān)API、資源的調(diào)用。

環(huán)境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 開發(fā)板類型:[潤和RK3568開發(fā)板]。
  • OpenHarmony系統(tǒng):3.2 Release。

環(huán)境搭建

完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進(jìn)行:

  1. [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進(jìn)制)。以3.2 Release版本為例:
  2. 搭建燒錄環(huán)境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發(fā)板的燒錄]
  3. 搭建開發(fā)環(huán)境。
    1. 開始前請參考[工具準(zhǔn)備],完成DevEco Studio的安裝和開發(fā)環(huán)境配置。
    2. 開發(fā)環(huán)境配置完成后,請參考[使用工程向?qū)創(chuàng)建工程(模板選擇“Empty Ability”)。
    3. 工程創(chuàng)建完成后,選擇使用[真機(jī)進(jìn)行調(diào)測]。
    4. HarmonyOS鴻蒙開發(fā)文檔參考:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

搜狗高速瀏覽器截圖20240326151547.png

代碼結(jié)構(gòu)解讀

本篇Codelab只對核心代碼進(jìn)行講解,完整代碼可以直接從gitee獲取。

HarmonyOS&OpenHarmony開發(fā)文檔PDFv
mau123789直接可以拿取,文檔包含在上

├──entry/src/main/ets                  // 代碼區(qū)
│  ├──common
│  │  ├──constants                     // 常量文件
│  │  │  └──CommonConst.ets            // 通用常量
│  │  ├──lottie
│  │  │  └──data.json                  // 動(dòng)畫JSON文件
│  │  └──utils
│  │     └──log                        // 日志工具類
│  │        └──Logger.ets
│  ├──entryability
│  │  └──EntryAbility.ts               // 程序入口類
│  ├──pages
│  │  └──MainPage.ets                  // 主界面
│  ├──view
│  │  ├──InnerComponent.ets            // 本地庫子頁面
│  │  └──OuterComponent.ets            // 社區(qū)庫子界面
│  └──viewmodel
│     ├──ButtonList.ets                // 按鈕類
│     └──InnerViewModel.ets            // 本地庫數(shù)據(jù)獲取
├──entry/src/main/resources            // 資源文件
└──library/src/main/ets                // 本地庫代碼區(qū)       
   ├──components
   │  └──MainPage           
   │     └──Buttons.ets                // 本地庫代碼實(shí)現(xiàn)
   └──viewmodel
      └──ButtonsViewModel.ets          // 按鈕數(shù)據(jù)類型

整體框架搭建

本篇Codelab由主頁面、本地庫組件頁面、社區(qū)庫組件頁面三個(gè)頁面組成,主頁面由Navigation作為根組件實(shí)現(xiàn)全局標(biāo)題,由Tabs組件實(shí)現(xiàn)本地庫和社區(qū)庫頁面的切換,代碼如下:

// MainPage.ets
import { Outer } from '../view/OuterComponent';
import { Inner } from '../view/InnerComponent';
import { CommonConstants } from '../common/constants/CommonConst';

@Entry
@Component
struct Index {
  private controller: TabsController = new TabsController();
  @State currentIndex: number = 0;

  ...

  build() {
    Column() {
      Navigation() {
        Tabs({ barPosition: BarPosition.Start, controller: this.controller }) {
          TabContent() {
            Inner()
          }.tabBar(this.TabBuilder(CommonConstants.FIRST_TAB))

          TabContent() {
            Outer()
          }.tabBar(this.TabBuilder(CommonConstants.SECOND_TAB))
        }
        .barWidth(CommonConstants.BAR_WIDTH)
        .barHeight($r('app.float.default_56'))
        .onChange((index: number) = > {
          this.currentIndex = index;
        })
      }
      .titleMode(NavigationTitleMode.Mini)
      .title(this.NavigationTitle)
      .hideBackButton(true)
    }
    .backgroundColor($r('app.color.app_bg'))
  }
}

在pages文件夾下新建components文件并在此文件夾下創(chuàng)建兩個(gè)ArkTS文件,分別命名為inner和outer,至此整體框架搭建完畢。

本地庫實(shí)現(xiàn)

本地庫主要是指未上架到ohpm中心且在項(xiàng)目組內(nèi)共享使用的庫文件,這類庫需要開發(fā)者在項(xiàng)目中創(chuàng)建并開發(fā)新的Library模塊,創(chuàng)建步驟如下:

  1. 通過如下兩種方法,在OpenHarmony工程中添加OpenHarmony ohpm塊。
    • 方法1:鼠標(biāo)移到工程目錄頂部,單擊鼠標(biāo)右鍵,選擇New>Module。
    • 方法2:在菜單欄選擇File > New > Module。
  2. 在Choose Your Ability Template界面中,選擇Static Library,并單擊Next。
  3. 在Configure the New Module界面中,設(shè)置新添加的模塊信息,設(shè)置完成后,單擊Finish完成創(chuàng)建。
    • Module name:新增模塊的名稱。
    • Language:選擇開發(fā)OpenHarmony ohpm包的語言。
    • Device type:選擇OpenHarmony ohpm包支持的設(shè)備類型。
    • Enable Native:是否創(chuàng)建一個(gè)用于調(diào)用C++代碼的OpenHarmony ohpm共享模塊。
  4. 創(chuàng)建完成后,會在工程目錄中生成OpenHarmony ohpm共享模塊及相關(guān)文件。

本Codelab在本地庫中實(shí)現(xiàn)了對Button組件的簡單封裝,主要代碼實(shí)現(xiàn)如下:

// library/src/main/ets/components/MainPage/Buttons.ets
@Component
export struct Buttons {
  @Prop buttonText: string;
  @Prop stateEffect: boolean;
  @Prop buttonShape: string;
  @Prop buttonType: string;
  @Prop fontColor: string;

  build() {
    Row() {
      Column() {
        Button({ type: ButtonViewModel.fetchType(this.buttonShape), stateEffect: this.stateEffect }){
          Text(this.buttonText)
          .fontSize($r('app.float.default_16'))
          .fontColor(this.fontColor || $r('app.color.white'))
        }
        .width($r('app.float.default_90'))
        .height($r('app.float.default_35'))
        .backgroundColor(ButtonViewModel.fetchBackgroundColor(this.buttonType))
      }
    }
  }
}

如果想在Codelab的主工程代碼中引用本地庫,有如下兩種方式:

方式一:在Terminal窗口中,執(zhí)行如下命令進(jìn)行安裝,并會在package.json中自動(dòng)添加依賴。

ohpm install ../library --save

方式二:在工程的oh_package.json5中設(shè)置OpenHarmony ohpm三方包依賴,配置示例如下:

"dependencies": {
  "@ohos/library": "file:../library"
}

依賴設(shè)置完成后,需要執(zhí)行ohpm install命令安裝依賴包,依賴包會存儲在工程的oh_modules目錄下。

ohpm install

在完成上述步驟后,我們繼續(xù)完成inner頁面的開發(fā),在inner頁面中我們通過import的方式引入開發(fā)的本地庫,并通過循環(huán)傳入不同的參數(shù)展示不同的button,代碼實(shí)現(xiàn)如下:

// InnerComponent.ets
import { Buttons } from '@ohos/library';

@Component
export struct Inner {
  @State buttonList: ButtonList[] = InnerViewModel.getButtonListData();
  scroller: Scroller = new Scroller();

  build() {
    Scroll(this.scroller) {
      Column({ space: CommonConstants.SPACE_12 }) {
        ForEach(this.buttonList,  (item: ButtonList) = > {
          Column() {
            Flex({
              direction: FlexDirection.Column,
              justifyContent: FlexAlign.SpaceBetween,
              alignItems: ItemAlign.Start
            }) {
              Column() {
                ...
              }
              .alignItems(HorizontalAlign.Start)

              Column() {
                Buttons({
                  buttonText: item.buttonText,
                  buttonShape: item.buttonShape,
                  buttonType: item.buttonType,
                  stateEffect: item.stateEffect,
                  fontColor: item.fontColor
                })
                  .alignSelf(ItemAlign.Center)
                  .margin({ bottom: $r('app.float.default_21') })
              }
              .width($r('app.float.default_260'))
              .height($r('app.float.default_90'))
              .backgroundImage($r('app.media.mobile'))
              .backgroundImageSize(ImageSize.Contain)
              .justifyContent(FlexAlign.End)
              .alignSelf(ItemAlign.Center)
              .align(Alignment.End)
            }
            .padding({
              bottom: $r('app.float.default_24')
            })
            .width(CommonConstants.CONTAINER_WIDTH)
            .height(CommonConstants.CONTAINER_HEIGHT)
          }
          .width(CommonConstants.CONTAINER_WIDTH)
          .aspectRatio(CommonConstants.ASPECT_RATIO_176)
          .padding({
            top: $r('app.float.default_12'),
            left: $r('app.float.default_8')
          })
          .backgroundColor($r('app.color.white'))
          .borderRadius($r('app.float.default_24'))
        })
      }
      .width(CommonConstants.CONTAINER_WIDTH)
      .padding({
        left: $r('app.float.default_12'),
        right: $r('app.float.default_12'),
        top: $r('app.float.default_12')
      })
    }
    .scrollable(ScrollDirection.Vertical)
    .scrollBar(BarState.Off)
    .margin({bottom: $r('app.float.default_24')})
  }
}

至此本地庫的調(diào)用已完成。

社區(qū)庫調(diào)用

社區(qū)庫是指已經(jīng)由貢獻(xiàn)者上架到ohpm中心供其他開發(fā)者下載使用的庫,調(diào)用這類庫的方法如下:

然后通過如下兩種方式設(shè)置OpenHarmony ohpm三方包依賴信息(下面步驟以@ohos/lottie三方庫為例,其他庫替換對應(yīng)庫的名字及版本號即可):

  • 方式一:在Terminal窗口中,執(zhí)行如下命令安裝OpenHarmony ohpm三方包,DevEco Studio會自動(dòng)在工程的oh_package.json中自動(dòng)添加三方包依賴。

    ohpm install @ohos/lottie --save
    
  • 方式二:在工程的oh_package.json5中設(shè)置OpenHarmony ohpm三方包依賴,配置示例如下:

    "dependencies": {
        "@ohos/lottie": "^2.0.0"
    }
    

    依賴設(shè)置完成后,需要執(zhí)行ohpm install命令安裝依賴包,依賴包會存儲在工程的oh_modules目錄下。

    ohpm install
    

在完成上述步驟后,我們繼續(xù)完成outer頁面的開發(fā),在outer頁面中我們通過import的方式引入配置的社區(qū)庫,并實(shí)現(xiàn)對社區(qū)庫動(dòng)畫的調(diào)用,關(guān)鍵代碼如下:

// OuterComponent.ets
import lottie, { AnimationItem } from '@ohos/lottie';
import Logger from '../common/utils/log/logger';
import { CommonConstants } from '../common/constants/CommonConst';

@Component
export struct Outer {
  private renderingSettings: RenderingContextSettings = new RenderingContextSettings(true);
  private renderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingSettings);
  private animateName: string = CommonConstants.ANIMATE_NAME;
  private animateItem: AnimationItem | null = null;
  @State canvasTitle: Resource | undefined = undefined;

  ...

  build() {
    Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween }) {

      // Canvas area
      Column() {
        Canvas(this.renderingContext)
          .width(CommonConstants.CONTAINER_WIDTH)
          .aspectRatio(CommonConstants.ASPECT_RATIO_176)
          .backgroundImage($r('app.media.canvasBg'))
          .backgroundImageSize(ImageSize.Cover)
          .onDisAppear(() = > {
            lottie.destroy(this.animateName);
          })
        ...
      }
      .margin({
        top: $r('app.float.default_10'),
        left: $r('app.float.default_10'),
        right: $r('app.float.default_10')
      })

      // Buttons area
      Column({ space: CommonConstants.SPACE_12 }) {
        Button() {
          ...
        }
        .width(CommonConstants.CONTAINER_WIDTH)
        .height($r('app.float.default_40'))
        .backgroundColor($r('app.color.outer_button_bg'))
        .onClick(() = > {
          this.canvasTitle = $r('app.string.outer_button_load');
          this.animateItem = lottie.loadAnimation({
            container: this.renderingContext,
            renderer: 'canvas',
            loop: 10,
            autoplay: true,
            name: this.animateName,
            path: 'common/lottie/data.json'
          });
        })
        ...
        }
      }
      .padding({
        left: $r('app.float.default_23'),
        right: $r('app.float.default_23'),
        bottom: $r('app.float.default_41')
      })
    }
    .height(CommonConstants.CONTAINER_HEIGHT)
  }
}

審核編輯 黃宇

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

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29736
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3548

    瀏覽量

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

    關(guān)注

    0

    文章

    188

    瀏覽量

    4336
收藏 人收藏

    評論

    相關(guān)推薦

    如何把第三方加到PROTEUS中?

    新手求教,弱弱的問下,下了一個(gè)第三方,說是要先安裝,再添加路徑,可是我下來的第三方沒有看到安裝文件啊。還望指教如何添加!
    發(fā)表于 06-15 22:32

    關(guān)于proteus第三方元件的問題

    下了兩個(gè)第三方元件,然后就不知道放哪了,也不知道怎么調(diào)用。百度不到,求大神解答。謝了!
    發(fā)表于 11-13 08:56

    Proteus 第三方元件

    第三方元件,基本包含大部分常用元件的,分享給大家。
    發(fā)表于 04-16 22:06

    第三方dll調(diào)用問題?。?!

    第三方dll,沒有.h,labview怎么實(shí)現(xiàn)調(diào)用,dll可以用VS打開,類說明也有
    發(fā)表于 05-11 09:14

    proteus第三方元件

    proteus第三方元件
    發(fā)表于 05-26 10:44

    下載python第三方

    python第三方的下載
    發(fā)表于 07-02 13:12

    Keil_C++環(huán)境移植第三方出現(xiàn)類型錯(cuò)誤問題怎樣去解決

    Misc 功能,添加--cpp11 即可支持C++??墒窃谝浦惨恍?b class='flag-5'>第三方的時(shí)候會出現(xiàn)問題,比如說FreeRTOS、USB等等。如以下編譯錯(cuò)誤:..\OS\FreeRTOS\task
    發(fā)表于 07-16 07:17

    怎樣去調(diào)用一個(gè)第三方的驅(qū)動(dòng)

    怎樣去調(diào)用一個(gè)第三方的驅(qū)動(dòng)呢?如何用IIC驅(qū)動(dòng)Terawins的圖像處理芯片T613呢?
    發(fā)表于 03-04 06:59

    鴻蒙開源第三方組件資料合集

    開發(fā)框架,可以讓Ohos的開發(fā)人員非常便捷,無需切換語言和編譯器的制作Ohos原生游戲項(xiàng)目移植狀態(tài):完成調(diào)用差異:無原項(xiàng)目基線版本:v1.13編程語言:Java效果展示4、鴻蒙開源
    發(fā)表于 03-23 09:53

    在Framework下調(diào)用第三方的C++算法庫

    Platform: RK3399OS: Android 7.1Kernel: v4.4.83背景:現(xiàn)在在Framework層及以下經(jīng)常會調(diào)用第三方的C++算法庫,比如語音識別,人臉識別等等。例如
    發(fā)表于 11-24 17:37

    移動(dòng)應(yīng)用第三方自動(dòng)檢測和分類

    移動(dòng)應(yīng)用中,廣泛使用第三方來幫助開發(fā)和增強(qiáng)應(yīng)用功能.很多關(guān)于移動(dòng)應(yīng)用分析以及訪問控制的研究工作,需要在分析之前對第三方進(jìn)行檢測、過濾或者
    發(fā)表于 12-29 14:35 ?0次下載

    鴻蒙支持機(jī)型 鴻蒙支持第三方手機(jī)嗎

    華為鴻蒙系統(tǒng)支持第三方手機(jī)嗎?鴻蒙支持機(jī)型有哪些呢?下面小編就來簡單介紹一下!
    的頭像 發(fā)表于 06-25 10:17 ?1.1w次閱讀

    鴻蒙開發(fā)中怎么引入第三方

    多個(gè) API 外也是支持組件調(diào)用的,那么鴻蒙應(yīng)用開發(fā)是如何與第三方銜接的呢? 加載一張圖
    的頭像 發(fā)表于 10-11 14:11 ?3828次閱讀

    在AWorks中怎樣去修改第三方的源碼呢

    AWorks對許多的第三方進(jìn)行了封裝,開發(fā)者只需要調(diào)用封裝好的接口就可以了,無需了解底層實(shí)現(xiàn)。一般情況下,這種開發(fā)方式十分簡便高效。在一些
    的頭像 發(fā)表于 07-03 14:27 ?1332次閱讀

    學(xué)會安裝第三方開源

    你好,我是愛吃魚香ROS的小魚。秉承著拒絕重復(fù)造輪子的ROS精神,本節(jié)我們學(xué)習(xí)如何在我們的工程里安裝第三方開源。
    的頭像 發(fā)表于 07-13 14:35 ?822次閱讀
    學(xué)會安裝<b class='flag-5'>第三方</b>開源<b class='flag-5'>庫</b>