- 鴻蒙操作系統應用開發實踐
- 陳美汝 鄭森文等
- 3256字
- 2022-07-28 19:33:57
1.6 應用配置文件
1.6.1 配置文件介紹
應用的每個HAP的根目錄下都存在一個config.json配置文件,如圖1.42所示,主要涵蓋以下3個方面:

圖1.42 config.json資源文件
(1)應用的全局配置信息,包含應用的包名、生產廠商、版本號等基本信息。
(2)應用在具體設備上的配置信息。
(3)HAP包的配置信息,包含每個Ability必須定義的基本屬性(如包名、類名、類型及Ability提供的能力),以及應用訪問系統或其他應用受保護部分所需的權限等。
config.json由屬性和值兩部分構成,屬性出現順序不分先后,且每個屬性最多只允許出現一次。每個屬性的值為JSON的基本數據類型(數值、字符串、布爾值、數組、對象或者null類型)。如果屬性值需要引用資源文件,可參見1.7.3節資源文件的使用。
1.6.2 配置信息App
應用的配置文件config.json中由app、deviceConfig和module 3個部分組成,缺一不可。app表示應用的全局配置信息。同一個應用的不同HAP包的app配置必須保持一致。deviceConfig表示應用在具體設備上的配置信息。module表示HAP包的配置信息。該標簽下的配置只對當前HAP包生效。app的示例代碼如下:
//config.json中app示例代碼 "app":{ "bundleName":"com.huawei.mytestapp.example", "vendor":"huawei", "version":{ "code":2, "name":"2.0" } "apiVersion":{ "compatible":3, "target":3 } }
其中,bundleName表示應用的包名,用于標識應用的唯一性。包名是由字母、數字、下畫線(_)和點號(.)組成的字符串,必須以字母開頭。支持的字符串長度為7~127字節。包名通常采用反域名形式表示(例如,com.huawei.mytestapp)。建議第一級為域名后綴com,第二級為廠商/個人名,第三級為應用名,也可以采用多級。
vendor表示對應用開發廠商的描述。字符串長度不超過255字節。vendor可以不定義,不定義就默認為空值。
version: code表示表示應用的版本號,僅用于HarmonyOS管理該應用,對用戶不可見。取值為大于零的整數,不可以缺省。
version: name表示應用的版本號,用于向用戶呈現。取值可以自定義,不可以缺省。
apiVersion: compatible表示應用運行需要的API最小版本。取值為大于零的整數,不可缺省。
apiVersion: target表示應用運行需要的API目標版本。取值為大于零的整數,可缺省,如果不填寫則自動識別為應用所在設備的當前API版本。
1.6.3 配置信息deviceConfig
deviceConfig包含在具體設備上的應用配置信息,可以包含default、car、tv、wearable、liteWearable、smartVision等屬性。default標簽內的配置適用于所有設備,其他設備類型如果有特殊的需求,則需要在該設備類型的標簽下進行配置。
deviceConfig的示例代碼如下:
//config.json中deviceConfig示例代碼 "deviceConfig":{ "default":{ "process":"com.huawei.hiworld.example", "directLaunch":false, "supportBackup":false, "network":{ "usesCleartext":true, "securityConfig":{ "domainSettings":{ "cleartextPermitted":true, "domains":[ { "subDomains":true, "name":"example.ohos.com" } ] } } } } }
deviceConfig中基本有6類信息:
(1)default表示所有設備通用的應用配置信息。
(2)car表示車機特有的應用配置信息。
(3)tv表示智慧屏特有的應用配置信息。
(4)wearable表示智能穿戴特有的應用配置信息。
(5)liteWearable表示輕量級智能穿戴特有的應用配置信息。
(6)smartVision表示智能攝像頭特有的應用配置信息。
本例中只舉了default中設置的應用配置信息,default標簽內的配置適用于所有設備,其他設備類型如果有特殊的需求,則需要在該設備類型的標簽下進行配置。具體這6個對象的內部結構說明可查閱官方文檔,此處不再贅述。
1.6.4 配置信息module
module中包含了HAP包的配置信息,示例代碼如下:
//config.json中module示例代碼 "module":{ "package":"com.example.myapplication.entry", "name":".MyOHOSAbilityPackage", "description":"$ string:description_application", "supported Modes":[ "drive" ], "deviceType":[ "car" ], "distro":{ "delivery WithInstall":true, "moduleName":"ohos_entry", "moduleType":"entry" }, "abilities":[ ... ], "shortcuts":[ ... ], "js":[ ... ], "reqPermissions":[ ... ], "defPermissions":[ ... ] }
(1)package表示HAP的包結構名稱,在應用內應保證唯一性。采用反向域名格式(建議與HAP的工程目錄保持一致)。字符串長度不超過127字節。該標簽僅適用于智慧屏、智能穿戴、車機,不可缺省。
(2)name表示HAP的類名。采用反向域名方式表示,前綴需要與同級的package標簽指定的包名一致,也可采用“.”開頭的命名方式。字符串長度不超過255字節。該標簽僅適用于智慧屏、智能穿戴、車機,不可缺省。
(3)description表示HAP的描述信息。字符串長度不超過255字節。如果字符串超出長度或者需要支持多語言,可以采用資源索引的方式添加描述內容。該標簽僅適用于智慧屏、智能穿戴、車機,可以缺省,默認值為空。
(4)supported Modes表示應用支持的運行模式。當前只定義了駕駛模式(drive)。該標簽僅適用于車機,可以缺省,默認值為空。
(5)deviceType表示允許Ability運行的設備類型。系統預定義的設備類型包括:tv(智慧屏)、car(車機)、wearable(智能穿戴)、liteWearable(輕量級智能穿戴)和default(通用)等,不可缺省。
(6)distro表示HAP發布的具體描述。該標簽僅適用于智慧屏、智能穿戴、車機,不可缺省。distro示例代碼如下:
"distro":{ "delivery WithInstall":true, "moduleName":"ohos_entry", "moduleType":"entry" }
· deliveryWithInstall表示當前HAP是否支持隨應用安裝,是一個布爾類型的值,不可以缺省,如果其值是true,則表示支持隨應用安裝,如果其值是false,則表示不支持隨應用安裝。
· moduleName用字符串的形式表示當前HAP的名稱,不可以缺省。
· moduleType用字符串的形式表示當前HAP的類型(entry和feature)。entry表示一個應用的主模塊。一個App中,對于同一設備類型必須有且只有一個entry類型的HAP,可獨立安裝運行。feature表示應用的動態特性模塊。一個App可以包含一個或多個feature類型的HAP,也可以不含。只有包含Ability的HAP才能夠獨立運行。
(7)ability表示當前模塊內的所有Ability。采用對象數組格式,其中每個元素表示一個Ability對象,可缺省,默認值為空。Ability非常重要,每當我們創建新的Ability,都要確認該處的配置是否正確,后面將詳細介紹Ability的形式。
(8)JS表示基于JS UI框架開發的JS模塊集合,其中的每個元素代表一個JS模塊的信息,不過不寫則說明該模塊沒有使用JS框架,下面給出一個示例,page中定義了JS UI的頁面路徑+頁面名稱,JS UI具體用法可閱讀第5章JS UI布局,示例代碼如下:

(9)shortcuts表示應用的快捷方式信息。采用對象數組格式,其中的每個元素表示一個快捷方式對象,可缺省,默認值為空。
(10)defPermissions表示應用定義的權限。應用調用者必須申請這些權限,這樣才能正常調用該應用,該值可缺省,默認值為空。
(11)reqPermissions表示應用運行時向系統申請的權限,該值可缺省,默認值為空。
這里再詳細講解一下abilities對象的內部結構,示例代碼如下:

(1)第一行的name表示Ability名稱。取值可采用反向域名方式表示,由包名和類名組成,如com.example.myapplication.MainAbility;也可采用“.”開頭的類名方式表示,如.MainAbility。該標簽僅適用于智慧屏、智能穿戴、車機,不可缺省。
(2)第二行的description則表示對Ability的描述。取值可以是描述性內容,也可以是對描述性內容的資源索引,以便支持多語言,可缺省,默認值為空。
(3)icon表示Ability圖標資源文件的索引。如果寫了如下代碼:$ media: ability_icon就可以使用resource文件夾中的media中的名字為ability_icon圖片作為App的圖標來顯示。如果在該Ability的skills屬性中,actions的取值包含action.system.home, entities取值中包含entity.system.home,則該Ability的icon將同時作為應用的icon。如果存在多個符合條件的Ability,則取位置靠前的Ability的icon作為應用的icon。這個數值可缺省,默認值為空。
(4)label表示Ability對用戶顯示的名稱。取值可以是Ability名稱,也可以是對該名稱的資源索引,以便支持多語言。如果在該Ability的skills屬性中,actions的取值包含action.system.home, entities取值中包含entity.system.home,則該Ability的label將同時作為應用的label。如果存在多個符合條件的Ability,則取位置靠前的Ability的label作為應用的label??扇笔?,默認值為空。
(5)uri表示Ability的統一資源標識符。格式為[scheme:][//authority][path][?query][#AbilitySlice]。可缺省,但對于data類型的Ability不可缺省。
(6)launchType表示Ability的啟動模式,支持standard和singleton兩種模式:standard表示該Ability可以有多實例。standard模式適用于大多數應用場景。singleton表示該Ability只可以有一個實例。例如,具有全局唯一性的呼叫來電界面即采用singleton模式。該標簽僅適用于智慧屏、智能穿戴、車機??扇笔?,默認值為standard。
(7)visible表示Ability是否可以被其他應用調用,是布爾類型的值。
(8)permissions表示其他應用的Ability調用此Ability時需要申請的權限。通常采用反向域名格式,取值可以是系統預定義的權限,也可以是開發者自定義的權限。如果是自定義權限,取值必須與defPermissions標簽中定義的某個權限的name標簽值一致。可缺省,默認值為空。
(9)skills表示Ability能夠接收的Intent的特征,可缺省,默認值為空。
(10)deviceCapability表示Ability運行時要求設備具有的能力,采用字符串數組的格式表示。
(11)type表示Ability的類型。page表示基于Page模板開發的FA,用于提供與用戶交互的能力。service表示基于Service模板開發的PA,用于提供后臺運行任務的能力。data表示基于Data模板開發的PA,用于對外部提供統一的數據訪問抽象。
(12)formEnabled和form是綁定使用的,formenabled表示FA類型的Ability是否提供卡片(form)能力。只有當formEnabled生效時,form才會生效,而form表示Ability Form的屬性。
(13)orientation表示屏幕的方向,主要有4個選項:
· unspecified:由系統自動判斷顯示方向。
· landscape:橫屏模式。
· portrait:豎屏模式。
· followRecent:跟隨棧中最近的應用。
如果沒有設置orientation,系統會自動使用unspecified屬性。
(14)剩下的還有backgroundModes、readPermission、directLaunch、configChanges、mission、targetAbility、multiUserShared、supportPipMode等屬性,具體完整的屬性可查閱官方文檔。
- Mastering vRealize Operations Manager(Second Edition)
- 玩到極致 iPhone 4S完全攻略
- Ubuntu Linux操作系統
- 嵌入式應用程序設計綜合教程(微課版)
- 構建可擴展分布式系統:方法與實踐
- Linux網絡內核分析與開發
- Linux Shell編程從入門到精通(第2版)
- 嵌入式Linux應用開發菜鳥進階
- AWS Development Essentials
- 注冊表應用完全DIY
- Learning Magento 2 Administration
- RHCSARHCE 紅帽Linux認證學習指南(第7版)EX200 & EX300
- 精解Windows 10
- Learning BeagleBone
- Learn SwiftUI