三方包打包和引入,幫你快速學(xué)習(xí)了解三方包的基本知識
前言
三方包的使用在開發(fā)中非常常見,比如引用已封裝好的包,或者使用和發(fā)布自己編寫的包。Haromony工程采用自研工具ohpm(Open Harmony Package Manager) 作為包管理和發(fā)布的標準,關(guān)于ohpm的詳細介紹,將在后續(xù)系列的文章里講解,本章還是重點關(guān)注三方包的內(nèi)容。
本文采用的示例較為簡單,主要目的是讓初學(xué)者快速學(xué)習(xí)了解三方包的基本知識。關(guān)于本地Har包依賴更詳細全面的使用可以參考鏈接橘子購物示例。
基本概念介紹和對比
名稱 | 基本概念 | 業(yè)務(wù)要求 |
HAP(Harmony Ability Package) | 應(yīng)用安裝和更新的最小單元 | 必須包含UIAbility或者ExtensionAbility 可以在設(shè)備上獨立安裝 可以包含資源 |
HAR(Harmony Archive) | 靜態(tài)共享包,編譯態(tài)復(fù)用 代碼和資源跟隨使用編譯,有多個使用方,會有多份相同拷貝 | 不包含UIAbility或者ExtensionAbility 不支持獨立安裝 可以發(fā)布到中心倉或者私倉供他人使用 |
HSP(Harmony Shared Package) | 動態(tài)共享包 運行時復(fù)用 代碼資源獨立編譯,有多個使用方也只會存在一份代碼 | 不包含UIAbility或者ExtensionAbility 不支持獨立安裝 |
關(guān)于表格里的名詞,這里做簡單的介紹UIAbility 是系統(tǒng)調(diào)度的基本單元,一個應(yīng)用可以包含多個UIAbility。每一個UIAbility在都會在任務(wù)列表中顯示一個對應(yīng)的任務(wù)。就是一個具備UI展示能力的應(yīng)用組件。ExtensionAbility 是特定場景下提供的應(yīng)用組件,類型多樣,目前有九種類型。例:FORM類型的ExtensionAbility組件,用于提供服務(wù)卡片場景相關(guān)能力。
Har包的使用場景最廣泛,我們重點講一下本地依賴har包的場景。
場景一 依賴本地Har模塊
1、創(chuàng)建工程
2、新建模塊
創(chuàng)建完后可以選擇直接右鍵新建模塊;也可以創(chuàng)建新目錄,再右鍵目錄創(chuàng)建模塊,這里選擇直接在根目錄下創(chuàng)建模塊
模塊類型選擇static library。
創(chuàng)建完后可以打開localHar/src/main/module.json5 文件 ,里面的type是har。
{
"module": {
"name": "localHar",
"type": "har",
"deviceTypes": [
"default"
]
}
}
module.json5 字段說明:
字段名稱 | 字段說明 | 備注 |
name | 模塊名稱 | 就是新建的模塊名稱 |
type | 模塊類型 | entry feature 對應(yīng)構(gòu)建產(chǎn)物的是Hap,share 是Hsp, har 是Har |
deviceTypes | 適配設(shè)備 | default:能夠使用全部系統(tǒng)能力的OpenHarmony設(shè)備。枚舉還包括phone,tv,tablet |
再看一下 localHar/index.ets:
export { MainPage } from './src/main/ets/components/mainpage/MainPage'
這個文件是整個模塊的入口,具體的入口配置在 localHar/oh-package.json5。
{
"name": "localhar",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "index.ets",
"author": "",
"license": "Apache-2.0",
"dependencies": {}
}
3、修改配置和文件
在entry/oh-package.json5里設(shè)置依賴關(guān)系(和npm的配置文件package.json十分相似)。
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "ISC",
"dependencies": {
"@ohos/localHar": "file:../localHar"
}
}
oh-package.json5 字段說明:
字段名稱 | 字段說明 | 備注 |
name | 名稱 | Har包的名稱盡量使用@group/packagename group是當前開發(fā)的組織 例:@ohos/shoppingDetail |
version | 版本號 | 符合semver語義化規(guī)范 例:1.0.0 |
main | 入口 | 指定的加載入口文件 |
author | 作者 | 里面可以設(shè)置作者name信息和email信息 |
description | 簡介 | 描述包信息的字符串 |
repository | 倉庫地址 | 當前包所在的開源倉庫地址 |
license | 開源協(xié)議 | 當前項目的開源許可證 |
dependencies | 生產(chǎn)依賴 | 項目運行所依賴的模塊,即項目生產(chǎn)環(huán)境下需要用到的依賴 |
devDependencies | 開發(fā)依賴 | 項目開發(fā)所依賴的模塊 |
添加依賴后會發(fā)現(xiàn)出現(xiàn)紅色報錯提示:
這時候可以點擊右上角的Sync Now,會自動檢查依賴下載情況。或者鼠標移動到報錯代碼部分,點擊出現(xiàn)的ohpm install. 就會自動下載對應(yīng)的依賴了。安裝完畢后,entry下出現(xiàn)oh_module,里面就是下載的依賴,這里的依賴其實是個軟鏈接,通過快捷方式跳轉(zhuǎn)。
此時就可以在entry里使用localHar的組件了。
打開localHar/src/main/ets/components/mainpage/MainPage.ets 修改后代碼如下:
@Component
export struct MainPage {
@State message: string = 'Hello LocalHar'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
打開entry/src/main/ets/pages/Index.ets 修改后代碼如下:
import {MainPage} from "@ohos/localHar"
@Entry
@Component
struct Index {
build() {
Row() {
MainPage()
}
.height('100%')
}
}
4、運行驗證
右上角綠色小三角構(gòu)建entry后運行,開發(fā)板展示如下:
場景二 依賴外部構(gòu)建好的HAr包
整個工程的構(gòu)建不會自動把里面Har類型的模塊打成Har包,可以在localHar/build里查看一下,我們這里把內(nèi)部的localHar打成Har包,通過直接操作生成的Har包來模擬引用外部Har。
所以需要我們自己手動去打Har。打包之前我們修改一下localHar/src/main/ets/components/mainpage/MainPage.ets文本內(nèi)容,方便區(qū)分是否生效。
1、修改UI展示
@Component
export struct MainPage {
@State message: string = 'Hello LibHar'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
2、模塊打包
首先左鍵選中要構(gòu)建的模塊。
然后上方的build菜單欄里點擊build Module ‘localHar’。
然后就可以看到打出的har包了。
我們將生成的Har包放到工程的單獨文件夾里,右鍵工程根目錄,新建directory。
文件夾名字沒有要求,這里用lib,表明是外部的包,然后我用手動拖拽的方式將之前打好的Har包移動到libs文件夾下,在彈框中點擊refactor確認
移動后,原先的模塊就可以不用了,我們?nèi)ジ囊幌耬ntry/oh-package.json5。
{
"license": "ISC",
"devDependencies": {},
"author": "",
"name": "entry",
"description": "Please describe the basic information.",
"main": "",
"version": "1.0.0",
"dependencies": {
"@ohos/localHar": "file:../lib/localHar.har"
}
}
3、運行驗證
然后再運行,這里為了防止干擾,可以先手動清理一下之前的構(gòu)建產(chǎn)物。
然后運行效果如圖:
場景三 從ohpm公倉上引入三方包
可以直接參考根目錄下的oh-package.json5。
{
"license": "",
"devDependencies": {
"@ohos/hypium": "1.0.6"
},
"author": "",
"name": "myapplication",
"description": "Please describe the basic information.",
"main": "",
"version": "1.0.0",
"dependencies": {}
}
里面引入了框架提供的hypium,三方包的引入方式和這個類似,我們可以去三方包的網(wǎng)站上去尋找自己需要的三方包:
我們引入這個二維碼相關(guān)的三方庫進行開發(fā)。
修改entry/oh-package.json5。
{
"license": "ISC",
"devDependencies": {},
"author": "",
"name": "entry",
"description": "Please describe the basic information.",
"main": "",
"version": "1.0.0",
"dependencies": {
"@ohos/localHar": "file:../lib/localHar.har",
"@ohos/zxing": "2.0.1"
}
}
然后同步一下,會自動安裝相關(guān)依賴,安裝后就可以使用三方包的功能了,我們在頁面里可以直接import我們需要的組件,進行開發(fā)。
import {MainPage} from "@ohos/localHar"
import {MultiFormatReader, BarcodeFormat, DecodeHintType, RGBLuminanceSource, BinaryBitmap, HybridBinarizer } from "@ohos/zxing";
@Entry
@Component
struct Index {
build() {
Row() {
MainPage()
}
.height('100%')
}
}
注意:本文中未涉及三方包發(fā)布講解,是因為筆者認為發(fā)布和ohpm工具更貼合,所以會在后面出專門的ohpm文章講解該部分。