鴻蒙(HarmonyOS)開發筆記四:項目結構


這篇我們來了解一下harmonyOS的項目結構,包括目錄結構及其作用,配置文件的基礎配置信息

1. 項目整體結構

之前我們創建過一個項目,有一個文本展示和一個按鈕,每點擊一次數字加1並顯示在文本框中。本篇我們基於這個基礎項目了解一下項目的整體結構和其中的配置,項目的整體結構如圖:

 

 

  首先有一個entry目錄,結合上篇的內容,我們知道一個應用是由一個或多個Hap包所組成的,Hap包又可以分為entry類型和feature類型,每個Hap包由:代碼、資源、第三方庫及應用配置文件組成。所以我們代碼中的entry目錄其實就一個應用的Hap包,它的類型的entry類型的Hap包。一個Hap包由代碼、資源、第三方庫及應用配置文件組成,接着我們來看這些資源,代碼等都分布在entry包的哪里

  在src/main/java下以包名命名的文件夾內分布着Java代碼。這里的代碼可以用來創建布局,動態調整布局以及為交互提供支撐服務。

  和java文件夾同級的resources目錄下分布應用資源,該目錄的base目錄下,按資源用途又分為多個文件夾資源:

  • element:表示元素資源,該文件夾下主要存放json格式的文件,主要用來表示 字符串、顏色值、布爾值等,可以在其他地方被引用
  • graphic:表示可繪制資源。用xml文件來表示,比如我們項目中設置的  圓角按鈕、按鈕顏色等都是通過引用這里的資源來統一管理的
  • layout:表示布局資源,用xml文件來表示,比如頁面的布局資源,都放在這里
  • media:表示媒體資源,包括圖片、音頻、視頻等非文本格式的文件。

  除了上述的這四類,還有其他類型的資源,因為我們項目暫時用不到,先不做考慮。resources目錄存儲的內容截圖如下:

 

 

  和main目錄平級的test目錄是測試目錄,可以用於對自己寫的功能添加單元測試,確保代碼的正確性

  和src平級的libs目錄用來存儲引用三方一些包,例如jar包,so包等。

  而和entry目錄平級的build目錄,則用來存放最終編譯完成后的包,也就是hap包。編譯后該包的內容如下:

 

 

最終在該目錄下會生成一個hap包。這個hap包中包含了我們項目中用到的圖片,布局,代碼和各種資源。

2. 項目的配置文件:

  每一個hap包下都包含了該hap包的配置信息,這個配置文件位於:entry/src/main/目錄下,由工具幫我們生成,命名為config.json,harmonyOS應用配置采用json格式的形式。下面我們來看一下這個配置文件中的內容,並簡要介紹一下配置的作用。該配置文件中,主要有三個模塊,如下圖:

 

 

  •  app:表示應用的全局配置信息。同一個應用的不同HAP包的“app”配置必須保持一致。
  • deviceConfig:表示應用在具體設備上的配置信息。
  • module:表示HAP包的配置信息。該標簽下的配置只對當前HAP包生效。

配置文件采用json格式,其中的屬性不分先后順序,每個屬性只允許出現一次。

下面具體看一下我們項目中出現的配置項都有哪些,以及它的作用:

2.1 app下的屬性

 bundleName:表示應用的包名,用於標識應用的唯一性。通常采用反轉的域名

vendor:表示開發應用的廠商

version:code表示內部版本號,用於系統管理版本使用,對用戶不可見,name表示應用的版本號,用於向用戶呈現

apiVersion:包含三個選項。

  compatible:表示應用運行需要的API最小版本。

  target:表示應用運行需要的API目標版本。

  releaseType:表示應用運行需要的API目標版本的類型,取值為“CanaryN”、“BetaN”或者“Release”,其中,N代表大於零的整數。

  • Canary:受限發布的版本。
  • Beta:公開發布的Beta版本。
  • Release:公開發布的正式版本。

deviceConfig:表示應用在具體設備上的配置信息。我們這里暫時沒用到

2.2 module下的配置:

  "module": {
    "package": "com.example.demo",  //表示HAP的包結構名稱,在應用內應保證唯一性。采用反向域名格式
    "name": ".MyApplication",  //表示HAP的類名。采用反向域名方式表示,因為我們指定了package,所以可以直接以.加類名的形式指定
    "deviceType": [   //表示允許Ability運行的設備類型。phone表示手機
      "phone"
    ],
    "distro": {  //表示HAP發布的具體描述
      "deliveryWithInstall": true,  //表示當前HAP是否支持隨應用安裝。true為支持隨應用安裝
      "moduleName": "entry",  //表示當前HAP的名稱。
      "moduleType": "entry"  //表示當前HAP的類型,包括兩種類型entry和feature
    },
    "abilities": [  //表示當前模塊內的所有Ability
      {
        "skills": [  //表示Ability能夠接收的Intent的特征
          {
            "entities": [
              "entity.system.home"  //表示能夠接收的Intent的Ability的類別(如視頻、桌面應用等),可以包含一個或多個entity。
            ],
            "actions": [
              "action.system.home"  //表示能夠接收的Intent的action值,可以包含一個或多個action
            ]
          }
        ],
        "orientation": "unspecified",  //表示該Ability的顯示模式,這里表示由系統自動判斷方向
        "name": "com.example.demo.MainAbility",  //表示Ability名稱。取值可采用反向域名方式表示,由包名和類名組成,也可以才用.開頭的形式表示
        "icon": "$media:icon",  //表示Ability圖標資源文件的索引,$media表示引用media目錄下的icon資源
        "description": "$string:mainability_description",  //表示對Ability的描述
        "label": "first_demo",  //表示Ability對用戶顯示的名稱,也就是你的應用安裝用戶設備后顯示的名稱
        "type": "page",  //表示Ability的Type類型,可以為page,service或data
        "launchType": "standard"  //表示Ability的啟動模式,支持“standard”和“singleton”兩種模式, standard表示可以有多個實例,single則是一個實例。
      }
    ]
  }

由於module下的配置較多,截圖無法截全,把配置貼出來,同時采用注釋的形式對每個配置進行說明

 本篇了解了基本的項目結構,以及各個資源目錄的情況,還有config配置文件中的基本配置項。

下一篇會介紹Ability的生命周期,生命周期很重要,如果想合理的使用應用資源,給用戶良好的體驗,生命周期至關重要。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM