功能開發(fā)的一多能力介紹
應(yīng)用開發(fā)至少包含兩部分工作: UI頁面開發(fā)和底層功能開發(fā)(部分需要聯(lián)網(wǎng)的應(yīng)用還會涉及服務(wù)端開發(fā))。前面章節(jié)介紹了如何解決頁面適配的問題,本章節(jié)主要介紹應(yīng)用如何解決設(shè)備系統(tǒng)能力差異的兼容問題。
系統(tǒng)能力
[系統(tǒng)能力](即SystemCapability,縮寫為SysCap)指操作系統(tǒng)中每一個相對獨立的特性,如藍牙,WIFI,NFC,攝像頭等,都是系統(tǒng)能力之一。每個系統(tǒng)能力對應(yīng)多個API,隨著目標設(shè)備是否支持該系統(tǒng)能力共同存在或消失。
與系統(tǒng)能力相關(guān)的,有支持能力集、聯(lián)想能力集和要求能力集三個核心概念。
- 支持能力集 :設(shè)備具備的系統(tǒng)能力集合,在設(shè)備配置文件中配置。
- 要求能力集 :應(yīng)用需要的系統(tǒng)能力集合,在應(yīng)用配置文件中配置。
- 聯(lián)想能力集 :開發(fā)應(yīng)用時IDE可聯(lián)想的API所在的系統(tǒng)能力集合,在應(yīng)用配置文件中配置。
說明:
開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
- 只有當應(yīng)用要求能力集是設(shè)備支持能力集的子集的時候,應(yīng)用才可以在該設(shè)備上分發(fā)、安裝和運行。
- 可以訪問[系統(tǒng)能力列表]了解全量的系統(tǒng)能力。
- 支持的設(shè)備類型分為兩大類: 典型設(shè)備和廠商自定義設(shè)備。默認設(shè)備、平板等常用的設(shè)備類型屬于典型設(shè)備,其它的屬于廠商自定義設(shè)備。對于典型設(shè)備,系統(tǒng)已經(jīng)預(yù)定義了相應(yīng)的系統(tǒng)能力集合;對于廠商自定義設(shè)備,需要廠商給出其系統(tǒng)能力集合的定義。
設(shè)備要求能力集的獲取及導(dǎo)入
對于廠商自定義設(shè)備,需要開發(fā)者自行從廠商處獲取該設(shè)備的要求能力集并導(dǎo)入到IDE中。
在IDE中點擊File->New->Import...后選擇“Import Product Compatibility ID”即可選擇及導(dǎo)入設(shè)備要求能力集,導(dǎo)入后的設(shè)備要求能力集會被寫入工程的syscap.json文件中。
多設(shè)備應(yīng)用開發(fā)
開發(fā)多設(shè)備應(yīng)用時,工程中默認的要求能力集是多個設(shè)備支持能力集的交集,默認的聯(lián)想能力集是多個設(shè)備支持能力集的并集。
- 開發(fā)者可以在運行時動態(tài)判斷某設(shè)備是否支持特定的系統(tǒng)能力。
- 開發(fā)者可以自行修改聯(lián)想能力集和要求能力集。
動態(tài)邏輯判斷
如果某個系統(tǒng)能力沒有寫入應(yīng)用的要求能力集中,那么在使用前需要判斷設(shè)備是否支持該系統(tǒng)能力。
- 方法1:canIUse接口幫助開發(fā)者來判斷該設(shè)備是否支持某個特定的syscap。
if (canIUse("SystemCapability.Communication.NFC.Core")) { console.log("該設(shè)備支持SystemCapability.Communication.NFC.Core"); } else { console.log("該設(shè)備不支持SystemCapability.Communication.NFC.Core"); }
- 方法2:開發(fā)者可通過import的方式將模塊導(dǎo)入,若當前設(shè)備不支持該模塊,import的結(jié)果為undefined,開發(fā)者在使用其API時,需要判斷其是否存在。
import controller from '@ohos.nfc.controller'; try { controller.enableNfc(); console.log("controller enableNfc success"); } catch (busiError) { console.log("controller enableNfc busiError: " + busiError); }
說明:
- 如果某系統(tǒng)能力是應(yīng)用運行必須的,則要將其寫入到應(yīng)用的要求能力集中,以確保應(yīng)用不會分發(fā)和安裝到不符合要求的設(shè)備上。
- 如果某系統(tǒng)能力不是應(yīng)用運行必須的,則可以在運行時做動態(tài)判斷,這樣可以最大程度擴大應(yīng)用的適用范圍。
配置聯(lián)想能力集和要求能力集
IDE會根據(jù)創(chuàng)建的工程所支持的設(shè)備自動配置聯(lián)想能力集和要求能力集,同時也支持開發(fā)者修改。
// syscap.json
{
"devices": {
"general": [ // 每一個典型設(shè)備對應(yīng)一個syscap支持能力集,可配置多個典型設(shè)備
"default",
"tablet"
],
"custom": [ // 廠家自定義設(shè)備
{
"某自定義設(shè)備": [
"SystemCapability.Communication.SoftBus.Core"
]
}
]
},
"development": { // addedSysCaps內(nèi)的sycap集合與devices中配置的各設(shè)備支持的syscap集合的并集共同構(gòu)成聯(lián)想能力集
"addedSysCaps": [
"SystemCapability.Communication.NFC.Core"
]
},
"production": { // 用于生成rpcid,慎重添加,可能導(dǎo)致應(yīng)用無法分發(fā)到目標設(shè)備上
"addedSysCaps": [], // devices中配置的各設(shè)備支持的syscap集合的交集,添加addedSysCaps集合再除去removedSysCaps集合,共同構(gòu)成要求能力集
"removedSysCaps": [] // 當該要求能力集為某設(shè)備的子集時,應(yīng)用才可被分發(fā)到該設(shè)備上
}
}
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
說明:
- 對于要求能力集,開發(fā)者修改時要十分慎重,修改不當會導(dǎo)致應(yīng)用無法分發(fā)和安裝到目標設(shè)備上。
- 對于聯(lián)想能力集,通過增加系統(tǒng)能力可以擴大IDE可聯(lián)想的API范圍。但要注意這些API可能在某些設(shè)備上不支持,使用前需要判斷。
總結(jié)
從應(yīng)用開發(fā)到用戶使用,通常要經(jīng)歷應(yīng)用分發(fā)和下載、應(yīng)用安裝、應(yīng)用運行等環(huán)節(jié)。借助SysCap機制,可以在各個環(huán)節(jié)中加以攔截或管控,保證應(yīng)用可以在設(shè)備上正常安裝和使用。
- 應(yīng)用分發(fā)和下載:只有當應(yīng)用要求能力集是設(shè)備支持能力集的子集時(即設(shè)備滿足應(yīng)用運行要求),應(yīng)用才可以分發(fā)到該設(shè)備。
- 應(yīng)用安裝:只有當應(yīng)用要求能力集是設(shè)備支持能力集的子集時,應(yīng)用才可以安裝到該設(shè)備。
- 應(yīng)用運行:應(yīng)用在使用要求能力集之外的能力前,需要動態(tài)判斷相應(yīng)系統(tǒng)能力的有效性,防止崩潰或功能異常等問題。
SysCap機制可以幫助開發(fā)者僅關(guān)注設(shè)備的系統(tǒng)能力,而不用考慮成百上千種具體的設(shè)備類型,降低多設(shè)備應(yīng)用開發(fā)難度。
審核編輯 黃宇
-
IDE
+關(guān)注
關(guān)注
0文章
338瀏覽量
46740 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2339瀏覽量
42805 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4382
發(fā)布評論請先 登錄
相關(guān)推薦
評論