鴻蒙應(yīng)用開發(fā)入門:進(jìn)一步了解第一個例子里的細(xì)節(jié)
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz
4.1 開發(fā)完第一個鴻蒙應(yīng)用后,下面在了解一下完整的鴻蒙應(yīng)用打包發(fā)布后應(yīng)該是什么樣子:
一個完整的打包后應(yīng)用結(jié)構(gòu)如下圖所示,這里我們先了解結(jié)構(gòu),具體怎么打包很簡單只要前提是要簽名!

1. HAP的分類
HAP又可分為entry和feature兩種模塊類型:
1)entry:應(yīng)用的主模塊。一個APP中,對于同一設(shè)備類型必須有且只有一個entry類型的HAP,可獨立安裝運(yùn)行。
2) feature:應(yīng)用的動態(tài)特性模塊。一個APP可以包含一個或多個feature類型的HAP,也可以不含。
2. HAP的組成
HAP是由代碼(Ability)、第三方庫、資源以及應(yīng)用配置文件構(gòu)成,只有包含Ability的HAP才能夠獨立運(yùn)行。
1)Ability
Ability是應(yīng)用所具備的能力的抽象,一個應(yīng)用可以包含一個或多個Ability。Ability分為兩種類型:FA(Feature Ability)和PA(Particle Ability)。FA/PA是應(yīng)用的基本組成單元,能夠?qū)崿F(xiàn)特定的業(yè)務(wù)功能。FA有UI界面,而PA無UI界面。
2)庫文件
庫文件是應(yīng)用依賴的第三方代碼形式,存放在libs目錄。
3)資源文件
應(yīng)用的資源文件(字符串、圖片、音頻等)存放于resources目錄下
4)配置文件
配置文件 (config.json) 是應(yīng)用的Ability信息,用于聲明應(yīng)用的Ability,以及應(yīng)用所需權(quán)限等信息
3. pack.info文件
描述應(yīng)用軟件包中每個HAP的屬性,由IDE編譯生成,應(yīng)用市場根據(jù)該文件進(jìn)行拆包和HAP的分類存儲。
HAP的具體屬性包括:
1)delivery-with-install: 表示該HAP是否支持隨應(yīng)用安裝。
2)name:HAP文件名。
3)module-type:模塊類型,entry或feature。
4)device-type:表示支持該HAP運(yùn)行的設(shè)備類型。
4.2 config.json詳細(xì)細(xì)節(jié)
1. 應(yīng)用的每個HAP的根目錄下都存在一個“config.json”配置文件,主要涵蓋以下三個方面:
1)應(yīng)用的全局配置信息,包含應(yīng)用的包名、生產(chǎn)廠商、版本號等基本信息。
2)應(yīng)用在具體設(shè)備上的配置信息。
3)HAP包的配置信息,包含每個Ability必須定義的基本屬性(如包名、類名、類型以及Ability提供的能力),以及應(yīng)用訪問系統(tǒng)或其他應(yīng)用受保護(hù)部分所需的權(quán)限等。
2. config.json配置文件的內(nèi)部結(jié)構(gòu)
應(yīng)用的配置文件“config.json”中由“app”、“deviceConfig”和“module”三個部分組成,缺一不可。
3. “config.json”文件約定
配置文件“config.json”采用JSON文件格式,由屬性和值兩部分構(gòu)成:
1)屬性:屬性出現(xiàn)順序不分先后,且每個屬性最多只允許出現(xiàn)一次。
2)值:每個屬性的值為JSON的基本數(shù)據(jù)類型(數(shù)值、字符串、布爾值、數(shù)組、對象或者null類型)。
學(xué)習(xí)建議:根據(jù)官方文檔自己做一個思維導(dǎo)圖,做的過程中熟悉,用的時候查詢,我學(xué)習(xí)的時候做的,附件在后面,需要一個叫MindMaster的思維導(dǎo)圖工具打開。做完思維導(dǎo)圖系統(tǒng)地熟悉一遍這個配置項后,再在下面的練習(xí)中,把每個配置項目的意思備注后面,加深印象。
練習(xí)1:認(rèn)一遍app部分,把說明注釋在第一個例子的app配置后面:
- "app": { //表示應(yīng)用的全局配置信息,就像這樣,后面的自己做......
- "bundleName": "com.example.myapplication",
- "vendor": "example",
- "version": {
- "code": 1,
- "name": "1.0"
- },
- "apiVersion": {
- "compatible": 3,
- "target": 3
- }
- },
練習(xí)2:認(rèn)一遍deviceConfig部分,把說明注釋在后面:
- "deviceConfig": {//表示應(yīng)用在具體設(shè)備上的配置信息。
- "default": {
- "process": "com.huawei.hiworld.example",
- "directLaunch": false,
- "supportBackup": false,
- "network": {
- "usesCleartext": true,
- "securityConfig": {
- "domainSettings": {
- "cleartextPermitted": true,
- "domains": [
- {
- "subDomains": true,
- "name": "example.ohos.com"
- }
- ]
- }
- }
- }
- }
- }
練習(xí)3:認(rèn)一遍認(rèn)一下module部分,把說明注釋在后面:
- "module": {//表示HAP包的配置信息。該標(biāo)簽下的配置只對當(dāng)前HAP包生效。
- "package": "com.example.myapplication",
- "name": ".MyApplication",
- "reqCapabilities": [
- "video_support"
- ],
- "deviceType": [
- "tv"
- ],
- "distro": {
- "deliveryWithInstall": true,
- "moduleName": "entry",
- "moduleType": "entry"
- },
- "abilities": [
- {
- "skills": [
- {
- "entities": [
- "entity.system.home"
- ],
- "actions": [
- "action.system.home"
- ]
- }
- ],
- "orientation": "landscape",
- "formEnabled": false,
- "name": "com.example.myapplication.MainAbility",
- "icon": "$media:icon",
- "description": "$string:mainability_description",
- "label": "MyApplication",
- "type": "page",
- "launchType": "standard"
- },
- {
- "orientation": "landscape",
- "formEnabled": false,
- "name": "com.example.myapplication.Secondbility",
- "icon": "$media:icon",
- "description": "$string:secondbility_description",
- "label": "entry",
- "type": "page",
- "launchType": "standard"
- }
- ]
- }
4.3 進(jìn)一步了解資源目錄的細(xì)節(jié)
1. 資源文件的知識點
應(yīng)用的資源文件都在resources目錄下,resources子目錄分兩大類目錄:具體的知識點,同樣我們做成思維導(dǎo)圖,見后面附件。
2. 資源文件的使用
base目錄與限定詞目錄中的資源文件:通過指定資源類型(type)和資源名稱(name)來引用。
1)Java文件引用資源文件的格式:
(1)普通資源:ResourceTable.type_name。
(2)系統(tǒng)資源,則采用:ohos.global.systemres.ResourceTable.type_name。
(3)目前支持的系統(tǒng)資源文件:
① ic_app:表示HarmonyOS應(yīng)用的默認(rèn)圖標(biāo),類型為媒體。
② request_location_reminder_title:表示“請求使用設(shè)備定位功能”的提示標(biāo)題,類型為字符串。
③ request_location_reminder_content:表示“請求使用設(shè)備定位功能”的提示內(nèi)容,類型為字符串。
示例一:在Java文件中,引用系統(tǒng)資源。
- ResourceManager rsManager = this.getResourceManager();
- try {
- String str = rsManager
- .getElement(ohos.global.systemres.ResourceTable.
- String_request_location_reminder_title).getString();
- Text text = (Text) findComponentById(ResourceTable.Id_text);
- text.setText(str);
- } catch (Exception e) {
- terminateAbility();
- }
示例二:在Java文件中,引用string.json文件中類型為“String”、名稱為“app_name”的資源。
string.json的例子:
- {
- "color":[
- {
- "name":"red",
- "value":"#ff0000"
- },
- {
- "name":"red_ref",
- "value":"$color:red"
- }
- ]
- }
- ohos.global.resource.ResourceManager resManager = getResourceManager();
- int color = resManager.getElement(ResourceTable.Color_red).getColor();
示例四:在Java文件中,獲取profile中的文件內(nèi)容。
- Resource resource = null;
- try {
- Text text = (Text) findComponentById(ResourceTable.Id_text);
- resource = getResourceManager().getResource(ResourceTable.Profile_test1);
- InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8");
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String lineTxt = "";
- while((lineTxt = bufferedReader.readLine()) != null){
- text.append(","+lineText);
- }
- } catch (Exception e) {
- }
2)XML文件引用資源文件的格式:
(1)普通資源,$type:name
(2)系統(tǒng)資源,則采用:$ohos:type:name。
在XML文件中,引用 string.json文件中類型為“String”、名稱為“app_name”的資源,示例如下:
- <?xml version="1.0" encoding="utf-8"?>
- <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
- ohos:width="match_parent"
- ohos:height="match_parent"
- ohos:orientation="vertical">
- <Text ohos:text="$string:app_name"/>
- </DirectionalLayout>
9. rawfile目錄中的資源文件
通過指定文件路徑和文件名稱來引用。
在Java文件中,引用一個路徑為“resources/rawfile/”、名稱為“ttt.txt”的資源文件,示例如下:
- Resource resource = null;
- try {
- Text text = (Text) findComponentById(ResourceTable.Id_text);
- resource = getResourceManager().getRawFileEntry("resources/rawfile/ttt.txt").openRawFile();
- InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8");
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String lineTxt = "";
- while((lineTxt = bufferedReader.readLine()) != null){
- text.append(","+lineTxt );
- }
- } catch (Exception e) {
- }
文章配套視頻課程《鴻蒙手機(jī)應(yīng)用開發(fā)入門》https://edu.51cto.com/course/26133.html
©著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
https://harmonyos.51cto.com/#zz