1. 程式人生 > 實用技巧 >鴻蒙(HarmonyOS)開發筆記四:專案結構

鴻蒙(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的生命週期,生命週期很重要,如果想合理的使用應用資源,給使用者良好的體驗,生命週期至關重要。