成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過實例學習鴻蒙靜態庫的創建與使用

系統 OpenHarmony
以前感覺HAR很陌生,這次通過對概念的了解,知道了其作用,并通過實例動手操作,完全掌握了HAR靜態庫的開發和使用,對基本使用方法有了詳細的了解,相信在以后讀開源代碼時,能夠分清靜態庫和動態庫了。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

簡要介紹

靜態共享包HAR(Harmony Archive),是為了實現代碼和資源的共享,可以包含代碼、C++庫、資源和配置文件,隨使用方一起編譯,如果在多個應用中進行調用,就需要有多個HAR,和應用綁定在一起,是一對一的關系。

為了從零開始熟悉靜態共享包,我們通過簡單的實例,學習一下具體的創建過程和使用方法。

具體實現

1、新建主工程

新建一個普通的HarmonyOS工程,選擇Application -> Empty Ability -> Model(Stage),開發工具不允許直接新建static library工程,個人猜測可能就是因為靜態庫必須和應用本身綁定在一起的緣故。

單獨的工程目錄結構如下,當前的模塊目錄是entry目錄,字體加粗顯示,

2、建立靜態庫

右擊工程名,選擇New -> Module…,選擇Static Library,

模塊創建完成后,工程結構如下圖,staticlibrary工程目錄名粗體顯示,

我們觀察staticlibrary模塊下的module.json5文件,發現對應的type值為har,代表靜態庫,主工程的type類型值為entry,而動態庫的type值官方定義為shared。本人對type值的定義感覺有點別扭,靜態庫和動態庫的type的定義不太對應,靜態庫type定義為har了,動態庫type為什么不能定義為hsp,或者動態庫type定義為了shared,靜態庫type為什么不能定義為static?而是現在這種,靜態庫type為har,動態庫type為shared,其實這些都不重要,記住就行了,也不需要手動經常改。

3、對多種形式的封裝

查了一下文檔,HAR支持ArkUI組件、接口和資源這三種形式的封裝,所以逐一測試一下?;痉椒ㄏ嗤紫仁窃趯儆谔峁┓降哪K中,實現模塊功能,并在index.ets中進行導出export操作,然后在使用方的應用page頁面中進行導入import操作。

HAR對ArkUI組件的支持

功能實現:

MainPage.ets:

@Component
export struct MainPage {
  @State message: string = 'Hello Har'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.Red)
      }
      .width('100%')
    }
    .height('30%')
  }
}

模塊導出:

Index.ets:

export { MainPage } from './src/main/ets/components/mainpage/MainPage'

模塊導入:

導入har,或者引用HAR前,需要先配置對HAR的依賴,打開entry主模塊下的oh-package.json5文件,因為我們是在主模塊中要引用靜態庫,所以我們修改模塊級依賴配置文件oh-package.json5,dependencies下添加新建的庫,后面file:…/跟著的是工程目錄樹中靜態庫的名稱staticlibrary。

我們在主模塊頁面index.ets中引入靜態庫的組件。

import { MainPage } from "@ohos/library"

@Entry
@Component
struct Index {
  @State message: string = 'This is entry'

  build() {
    Row() {
      Column() {
        MainPage()

        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

現在基本完成了,編譯看看效果,可以先編譯靜態庫,在項目樹中選擇staticlibrary,然后點擊菜單欄中的build,會看到第一個菜單為 Make Module ‘staticlibrary’,執行后,我們發現在工程代碼目錄staticlibrary\build\default\outputs\default下有一個staticlibrary.har文件,說明編譯成功。

我們再選中entry,然后點擊菜單欄中的build,會看到第一個菜單為 Make Module ‘entry’,執行后,我們發現在工程代碼目錄entry\build\default\outputs\default下有一個entry-default-unsigned.hap文件,說明也編譯成功了。

我們通過預覽器查看一下界面。

我們再通過模擬器查看一下運行效果。

模擬器中成功運行,說明我們通過entry中調用staticlibrary操作成功。

HAR對ArkUI接口的支持

功能實現:

MainInterface.ets:

export class TitleManager {
  static getTitle() {
    return "100以內隨機數:";
  }
}


export function getRandomNum() {
  return Math.floor(Math.random() * 100);
}

模塊導出:

Index.ets:

export { TitleManager } from './src/main/ts/MainInterface'
export { getRandomNum } from './src/main/ts/MainInterface'

模塊導入:

由于我們是放在同一個har包中,所以不用重新配置對HAR的依賴。直接在頁面文件中引入靜態庫中的接口。

InterfaceCaller.ets:

import { TitleManager, getRandomNum } from "@ohos/library"

@Entry
@Component
struct InterfaceCaller {
  build() {

    Column() {
      Row() {
        Text(TitleManager.getTitle())
          .fontSize(30)

        Text(getRandomNum().toString())
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .padding(20)
    }
    .height('100%')
  }
}

我們通過預覽器查看一下界面。

HAR對ArkUI資源的支持

功能實現:

直接編輯staticlibrary下的resources/base/element/和media下的資源文件即可。

String.json:

{
  "string": [
    {
      "name": "page_show",
      "value": "page from npm package"
    }
  ]
}

Har.png:

模塊導出:

不需要在Index.ets中做導出操作,HAP模塊編譯時會自動從依賴的模塊中收集資源文件。

模塊導入:

由于我們是放在同一個har包中,所以不用重新配置對HAR的依賴。

對于資源文件不需要在頁面文件中顯式的執行導入操作。

ResourceCaller.ets:

@Entry
@Component
struct ResourceCaller {
  build() {

    Row() {
      Column() {
        Text($r('app.string.page_show'))
          .fontSize(30)
          .padding(20)


        Image($r("app.media.har"))
          .width(100)
          .objectFit(ImageFit.Contain)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .padding(20)
    }
    .height('100%')
  }
}

我們通過預覽器查看一下界面。

至此,我們基本實踐了HAR包支持的三種形式。

經驗總結

以前感覺HAR很陌生,這次通過對概念的了解,知道了其作用,并通過實例動手操作,完全掌握了HAR靜態庫的開發和使用,對基本使用方法有了詳細的了解,相信在以后讀開源代碼時,能夠分清靜態庫和動態庫了。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2023-09-08 14:48:41

動態共享包HSP

2011-08-18 10:47:48

Xcode 4靜態庫

2011-07-27 14:56:07

iPhone Makefile Dylib

2009-08-27 16:00:03

C#靜態字段C#實例字段

2011-07-11 16:13:01

Java靜態變量實例變量

2009-12-28 11:08:34

ADO 實例

2011-07-18 15:52:50

iPhone 靜態庫

2021-01-19 09:35:36

Python視頻游戲編程語言

2009-06-27 10:59:04

2010-04-22 10:41:18

靜態庫bada

2010-09-10 15:37:44

SQL函數

2010-11-19 09:48:48

ORACLE創建實例

2015-05-13 09:57:14

C++靜態庫與動態庫

2011-04-02 16:33:33

2011-06-21 15:11:04

QT 數據庫

2011-08-11 16:55:34

Oracle數據庫AWR

2024-12-31 00:07:12

2024-08-26 00:00:01

C#線程操作系統

2015-03-03 13:28:21

實例動態網頁靜態緩存

2011-07-27 16:36:03

iphone Objective- 靜態庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品视频在线免费观看 | 国产精品3区 | 日韩一区二区在线观看视频 | 网站黄色在线免费观看 | 欧洲亚洲精品久久久久 | 青青青伊人 | 国产一区二区三区久久久久久久久 | www.久久精品 | av一区二区三区四区 | 亚洲 日本 欧美 中文幕 | 久草www | 欧美一级淫片007 | 激情久久网| 久久亚洲精品久久国产一区二区 | 亚洲免费大片 | 久久九九网站 | 精品毛片 | 在线欧美亚洲 | 亚洲顶级毛片 | av免费入口| a级在线免费观看 | 九九精品影院 | 人人cao| 亚洲精品在线免费播放 | 天堂国产 | 久久6视频 | 激情福利视频 | 天天躁日日躁狠狠很躁 | 欧美精品网站 | 亚洲国产精品99久久久久久久久 | 亚洲91视频 | 色婷婷久久综合 | 久久精品久久久 | 亚洲精品成人网 | 欧美精品成人影院 | 夜夜骑首页 | 成人av片在线观看 | 91九色在线观看 | 黄色毛片一级 | 日韩精品免费 | 天天色图|