鸿蒙应用开发入门:进一步了解第一个例子里的细节

开发
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

 [[360074]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

4.1 开发完第一个鸿蒙应用后,下面在了解一下完整的鸿蒙应用打包发布后应该是什么样子:

一个完整的打包后应用结构如下图所示,这里我们先了解结构,具体怎么打包很简单只要前提是要签名!


1. HAP的分类

HAP又可分为entry和feature两种模块类型:

1)entry:应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。

2) feature:应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。

2. HAP的组成

HAP是由代码(Ability)、第三方库、资源以及应用配置文件构成,只有包含Ability的HAP才能够独立运行。

1)Ability

Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA(Feature Ability)和PA(Particle Ability)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。

2)库文件

库文件是应用依赖的第三方代码形式,存放在libs目录。

3)资源文件

应用的资源文件(字符串、图片、音频等)存放于resources目录下

4)配置文件

配置文件 (config.json) 是应用的Ability信息,用于声明应用的Ability,以及应用所需权限等信息

3. pack.info文件

描述应用软件包中每个HAP的属性,由IDE编译生成,应用市场根据该文件进行拆包和HAP的分类存储。

HAP的具体属性包括:

1)delivery-with-install: 表示该HAP是否支持随应用安装。

2)name:HAP文件名。

3)module-type:模块类型,entry或feature。

4)device-type:表示支持该HAP运行的设备类型。

4.2 config.json详细细节

1. 应用的每个HAP的根目录下都存在一个“config.json”配置文件,主要涵盖以下三个方面:

1)应用的全局配置信息,包含应用的包名、生产厂商、版本号等基本信息。

2)应用在具体设备上的配置信息。

3)HAP包的配置信息,包含每个Ability必须定义的基本属性(如包名、类名、类型以及Ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。

2. config.json配置文件的内部结构

应用的配置文件“config.json”中由“app”、“deviceConfig”和“module”三个部分组成,缺一不可。

3. “config.json”文件约定

配置文件“config.json”采用JSON文件格式,由属性和值两部分构成:

1)属性:属性出现顺序不分先后,且每个属性最多只允许出现一次。

2)值:每个属性的值为JSON的基本数据类型(数值、字符串、布尔值、数组、对象或者null类型)。

学习建议:根据官方文档自己做一个思维导图,做的过程中熟悉,用的时候查询,我学习的时候做的,附件在后面,需要一个叫MindMaster的思维导图工具打开。做完思维导图系统地熟悉一遍这个配置项后,再在下面的练习中,把每个配置项目的意思备注后面,加深印象。

练习1:认一遍app部分,把说明注释在第一个例子的app配置后面:

  1. "app": { //表示应用的全局配置信息,就像这样,后面的自己做...... 
  2.   "bundleName""com.example.myapplication"
  3.   "vendor""example",  
  4.   "version": { 
  5.     "code": 1,  
  6.     "name""1.0"   
  7.   }, 
  8.   "apiVersion": {  
  9.     "compatible": 3,   
  10.     "target": 3  
  11.   } 
  12. }, 

 练习2:认一遍deviceConfig部分,把说明注释在后面:

  1. "deviceConfig": {//表示应用在具体设备上的配置信息。 
  2.   "default": {  
  3.     "process""com.huawei.hiworld.example"
  4.     "directLaunch"false
  5.     "supportBackup"false
  6.     "network": { 
  7.       "usesCleartext"true
  8.       "securityConfig": { 
  9.         "domainSettings": {  
  10.           "cleartextPermitted"true,  
  11.           "domains": [ 
  12.             { 
  13.               "subDomains"true
  14.               "name""example.ohos.com" 
  15.             } 
  16.           ] 
  17.         } 
  18.       } 
  19.     } 
  20.   } 

 练习3:认一遍认一下module部分,把说明注释在后面:

  1. "module": {//表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。 
  2.   "package""com.example.myapplication",  
  3.   "name"".MyApplication"
  4.   "reqCapabilities": [ 
  5.     "video_support"   
  6.   ], 
  7.   "deviceType": [ 
  8.     "tv" 
  9.   ], 
  10.   "distro": { 
  11.     "deliveryWithInstall"true
  12.     "moduleName""entry"
  13.     "moduleType""entry" 
  14.   }, 
  15.   "abilities": [ 
  16.     { 
  17.       "skills": [ 
  18.         { 
  19.           "entities": [ 
  20.             "entity.system.home" 
  21.           ], 
  22.           "actions": [ 
  23.             "action.system.home" 
  24.           ] 
  25.         } 
  26.       ], 
  27.       "orientation""landscape",  
  28.       "formEnabled"false
  29.       "name""com.example.myapplication.MainAbility"
  30.       "icon""$media:icon"
  31.       "description""$string:mainability_description"
  32.       "label""MyApplication"
  33.       "type""page"
  34.       "launchType""standard" 
  35.     }, 
  36.     { 
  37.       "orientation""landscape"
  38.       "formEnabled"false
  39.       "name""com.example.myapplication.Secondbility"
  40.       "icon""$media:icon"
  41.       "description""$string:secondbility_description"
  42.       "label""entry"
  43.       "type""page"
  44.       "launchType""standard" 
  45.     } 
  46.   ] 

 4.3 进一步了解资源目录的细节

1. 资源文件的知识点

应用的资源文件都在resources目录下,resources子目录分两大类目录:具体的知识点,同样我们做成思维导图,见后面附件。

2. 资源文件的使用

base目录与限定词目录中的资源文件:通过指定资源类型(type)和资源名称(name)来引用。

1)Java文件引用资源文件的格式:

(1)普通资源:ResourceTable.type_name。

(2)系统资源,则采用:ohos.global.systemres.ResourceTable.type_name。

(3)目前支持的系统资源文件:

① ic_app:表示HarmonyOS应用的默认图标,类型为媒体。

② request_location_reminder_title:表示“请求使用设备定位功能”的提示标题,类型为字符串。

③ request_location_reminder_content:表示“请求使用设备定位功能”的提示内容,类型为字符串。

示例一:在Java文件中,引用系统资源。

  1. ResourceManager rsManager = this.getResourceManager(); 
  2. try { 
  3.     String str = rsManager 
  4.             .getElement(ohos.global.systemres.ResourceTable. 
  5.                     String_request_location_reminder_title).getString(); 
  6.     Text text = (Text) findComponentById(ResourceTable.Id_text); 
  7.     text.setText(str); 
  8. } catch (Exception e) { 
  9.     terminateAbility(); 

 示例二:在Java文件中,引用string.json文件中类型为“String”、名称为“app_name”的资源。

string.json的例子:

  1.     "color":[ 
  2.         { 
  3.             "name":"red"
  4.             "value":"#ff0000" 
  5.         }, 
  6.         { 
  7.             "name":"red_ref"
  8.             "value":"$color:red" 
  9.         } 
  10.     ] 
  11.  
  12. ohos.global.resource.ResourceManager resManager = getResourceManager(); 
  13. int color = resManager.getElement(ResourceTable.Color_red).getColor(); 

 示例四:在Java文件中,获取profile中的文件内容。

  1. Resource resource = null
  2. try { 
  3.     Text text = (Text) findComponentById(ResourceTable.Id_text); 
  4.     resource = getResourceManager().getResource(ResourceTable.Profile_test1); 
  5.     InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8"); 
  6.     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
  7.     String lineTxt = ""
  8.     while((lineTxt = bufferedReader.readLine()) != null){ 
  9.         text.append(","+lineText); 
  10.     } 
  11. } catch (Exception e) { 
  12.      

 2)XML文件引用资源文件的格式:

(1)普通资源,$type:name

(2)系统资源,则采用:$ohos:type:name。

在XML文件中,引用 string.json文件中类型为“String”、名称为“app_name”的资源,示例如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.     ohos:width="match_parent" 
  4.     ohos:height="match_parent" 
  5.     ohos:orientation="vertical"
  6.     <Text ohos:text="$string:app_name"/> 
  7. </DirectionalLayout> 

 9. rawfile目录中的资源文件

通过指定文件路径和文件名称来引用。

在Java文件中,引用一个路径为“resources/rawfile/”、名称为“ttt.txt”的资源文件,示例如下:

  1. Resource resource = null
  2. try { 
  3.     Text text = (Text) findComponentById(ResourceTable.Id_text); 
  4.     resource = getResourceManager().getRawFileEntry("resources/rawfile/ttt.txt").openRawFile(); 
  5.     InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8"); 
  6.     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
  7.     String lineTxt = ""
  8.     while((lineTxt = bufferedReader.readLine()) != null){ 
  9.         text.append(","+lineTxt ); 
  10.     } 
  11. } catch (Exception e) { 
  12.  

 文章配套视频课程《鸿蒙手机应用开发入门》https://edu.51cto.com/course/26133.html

©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/#zz

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2015-10-19 14:57:51

2009-12-28 10:08:07

OracleSQLDevelope开发框架

2011-07-27 12:58:43

Android MarAndroid应用商店

2023-09-01 18:20:43

Chrome代码测试版

2019-03-22 10:20:39

加速Windows 10启动

2011-07-29 15:02:22

LifeSize视频协作

2020-12-10 20:00:04

数字货币比特币区块链

2020-11-12 09:29:29

5G

2009-03-19 19:00:35

虚拟化VmwareEMC

2009-11-30 18:35:05

BizSparkDreamSparkWebSiteSpar

2014-01-08 10:22:28

思科Videoscape

2010-03-15 09:40:19

Windows 8研发

2009-08-26 14:48:05

C#委托与事件

2012-04-30 21:35:08

Windows Pho

2020-09-22 10:49:12

大数据旅游技术

2013-06-17 11:53:49

思科云服务思科

2021-04-05 18:06:36

谷歌安卓Google Play

2009-03-31 11:12:59

万兆以太网

2010-04-14 16:11:09

Oracle服务器
点赞
收藏

51CTO技术栈公众号