自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過實(shí)例學(xué)習(xí)鴻蒙靜態(tài)庫的創(chuàng)建與使用

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

想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

簡要介紹

靜態(tài)共享包HAR(Harmony Archive),是為了實(shí)現(xiàn)代碼和資源的共享,可以包含代碼、C++庫、資源和配置文件,隨使用方一起編譯,如果在多個(gè)應(yīng)用中進(jìn)行調(diào)用,就需要有多個(gè)HAR,和應(yīng)用綁定在一起,是一對一的關(guān)系。

為了從零開始熟悉靜態(tài)共享包,我們通過簡單的實(shí)例,學(xué)習(xí)一下具體的創(chuàng)建過程和使用方法。

具體實(shí)現(xiàn)

1、新建主工程

新建一個(gè)普通的HarmonyOS工程,選擇Application -> Empty Ability -> Model(Stage),開發(fā)工具不允許直接新建static library工程,個(gè)人猜測可能就是因?yàn)殪o態(tài)庫必須和應(yīng)用本身綁定在一起的緣故。

單獨(dú)的工程目錄結(jié)構(gòu)如下,當(dāng)前的模塊目錄是entry目錄,字體加粗顯示,

2、建立靜態(tài)庫

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

模塊創(chuàng)建完成后,工程結(jié)構(gòu)如下圖,staticlibrary工程目錄名粗體顯示,

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

3、對多種形式的封裝

查了一下文檔,HAR支持ArkUI組件、接口和資源這三種形式的封裝,所以逐一測試一下。基本方法相同,首先是在屬于提供方的模塊中,實(shí)現(xiàn)模塊功能,并在index.ets中進(jìn)行導(dǎo)出export操作,然后在使用方的應(yīng)用page頁面中進(jìn)行導(dǎo)入import操作。

HAR對ArkUI組件的支持

功能實(shí)現(xiàn):

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%')
  }
}

模塊導(dǎo)出:

Index.ets:

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

模塊導(dǎo)入:

導(dǎo)入har,或者引用HAR前,需要先配置對HAR的依賴,打開entry主模塊下的oh-package.json5文件,因?yàn)槲覀兪窃谥髂K中要引用靜態(tài)庫,所以我們修改模塊級依賴配置文件oh-package.json5,dependencies下添加新建的庫,后面file:…/跟著的是工程目錄樹中靜態(tài)庫的名稱staticlibrary。

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

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%')
  }
}

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

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

我們通過預(yù)覽器查看一下界面。

我們再通過模擬器查看一下運(yùn)行效果。

模擬器中成功運(yùn)行,說明我們通過entry中調(diào)用staticlibrary操作成功。

HAR對ArkUI接口的支持

功能實(shí)現(xiàn):

MainInterface.ets:

export class TitleManager {
  static getTitle() {
    return "100以內(nèi)隨機(jī)數(shù):";
  }
}


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

模塊導(dǎo)出:

Index.ets:

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

模塊導(dǎo)入:

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

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%')
  }
}

我們通過預(yù)覽器查看一下界面。

HAR對ArkUI資源的支持

功能實(shí)現(xiàn):

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

String.json:

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

Har.png:

模塊導(dǎo)出:

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

模塊導(dǎo)入:

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

對于資源文件不需要在頁面文件中顯式的執(zhí)行導(dǎo)入操作。

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%')
  }
}

我們通過預(yù)覽器查看一下界面。

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

經(jīng)驗(yàn)總結(jié)

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

想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:

51CTO 開源基礎(chǔ)軟件社區(qū)

https://ost.51cto.com

責(zé)任編輯:jianghua 來源: 51CTO 開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2023-09-08 14:48:41

動態(tài)共享包HSP

2011-08-18 10:47:48

Xcode 4靜態(tài)庫

2011-07-27 14:56:07

iPhone Makefile Dylib

2009-08-27 16:00:03

C#靜態(tài)字段C#實(shí)例字段

2011-07-11 16:13:01

Java靜態(tài)變量實(shí)例變量

2009-12-28 11:08:34

ADO 實(shí)例

2011-07-18 15:52:50

iPhone 靜態(tài)庫

2021-01-19 09:35:36

Python視頻游戲編程語言

2009-06-27 10:59:04

2010-04-22 10:41:18

靜態(tài)庫bada

2010-09-10 15:37:44

SQL函數(shù)

2010-11-19 09:48:48

ORACLE創(chuàng)建實(shí)例

2015-05-13 09:57:14

C++靜態(tài)庫與動態(tài)庫

2011-04-02 16:33:33

2011-08-11 16:55:34

Oracle數(shù)據(jù)庫AWR

2024-12-31 00:07:12

2011-06-21 15:11:04

QT 數(shù)據(jù)庫

2011-08-18 13:37:57

iPhone項(xiàng)目靜態(tài)庫

2010-04-01 09:45:38

NoSQL

2024-08-26 00:00:01

C#線程操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號