鸿蒙APP应用开辟教程—超具体的项目结构说明

乌市泽哥  金牌会员 | 2024-6-21 19:39:22 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

1. 新建项目

打开DevEco Studio, 选择 Create Project:
1.1 选择模版

Create Project - Choose Template

1.2 配置项目

Create Project - Configure Project
假如使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 好比:


  • 3.0.0(API 8)及更早 - 仅支持 FA模式, 支持 ArkTS语言和 JS语言



  • 3.1.0(API 9) - 支持Stage 和 FA 模式, 仅支持ArkTS语言

假如使用的DevEco 4.X 版本,则默认就是 Stage模式和ArkTS语言, 且不支持切换模式和语言, 但是支持选择nodejs 版本:

从工具默认选择看:


  • Satge 模式 是官网主推模式
  • ArkTS语言是官方主推语言, 后续不再支持创建选择JS语言
  • 不再默认支持低代码模式(Enable Super Visual)
  • 支持的Device从 Phone到 Tablet 以及 2in1.
  • 支持自定义主入口名称 entry, 可更像 Android那样设置为 app
  • 支持选择 nodejs 版本
2. 项目结构

2.1 Stage模子应用

根据官方的表述 Stage模子的应用包结构如下,


  • 一个应用入口 Entry.hap
  • 一到多个功能Feature.hap
  1. @startuml
  2. node "App Pack(xxx.app)"{
  3.    
  4.     node "Entry.hap" {
  5.         [ets] as 0
  6.         [resources] as 1
  7.         [libs] as 2
  8.         [resources.index] as 3
  9.         [module.json] as 4
  10.     }
  11.     node  "FeatureA.hap" {
  12.         [ets] as 5
  13.         [resources] as 6
  14.         [libs] as 7
  15.         [resources.index] as 8
  16.         [module.json] as 9
  17.     }
  18.     node "FeatureB.hap" {
  19.         [ets] as 10
  20.         [resources] as 11
  21.         [libs] as 12
  22.         [resources.index] as 13
  23.         [module.json] as 14
  24.     }  
  25.     component pak.info
  26.     Entry.hap -d[hidden]- FeatureA.hap
  27.     FeatureA.hap -d[hidden]- FeatureB.hap
  28.     FeatureB.hap -d[hidden]- pak.info  
  29. }
  30. @enduml
复制代码

每个应用项目必须在项目标代码目录下参加配置文件,这些配置文件会向编译工具、操作体系和应用市场提供应用的根本信息。
在基于Stage模子开辟的应用项目代码下,都存在一个app.json5及一个或多个module.json5这两种配置文件。
app.json5重要包含以下内容:


  • 应用的全局配置信息,包含应用的包名、开辟厂商、版本号等根本信息。
  • 特定设备类型的配置信息。
module.json5重要包含以下内容:


  • Module的根本配置信息,例如Module名称、类型、形貌、支持的设备类型等根本信息。
  • 应用组件信息,包含UIAbility组件和ExtensionAbility组件的形貌信息。
  • 应用运行过程中所需的权限信息。
具体到上面的项目, app.json5如下:
  1. {
  2.   "app": {
  3.     "bundleName": "net.devwiki.hmdemo", // 类似于包名
  4.     "vendor": "example", // id
  5.     "versionCode": 1000000, // 版本号
  6.     "versionName": "1.0.0", // 版本名称
  7.     "icon": "$media:app_icon", // 图标
  8.     "label": "$string:app_name" // 名称
  9.   }
  10. }
复制代码
其中:


  • icon 为 AppScope/resources/base/media 文件夹下的 app_icon.png
  • label 为 AppScope/resources/base/string.json 中的 app_name
  1. {
  2.   "string": [
  3.     {
  4.       "name": "app_name",
  5.       "value": "HMDemo"
  6.     }
  7.   ]
  8. }
复制代码

此处以 HM3Demo为例,项目文件夹结构如下:

各个文件夹及文件说明如下:


  • .hvigor : 项目编译构建文件夹(可忽略)
  • .idea : IDEA项目配置文件夹(可忽略)
  • AppScope > app.json5:应用的全局配置信息。
  • entry:HarmonyOS工程模块,编译构建天生一个HAP包。

    • src > main > ets:用于存放ArkTS源码。
    • src > main > ets > entryability:应用/服务的入口。
    • src > main > ets > pages:应用/服务包含的页面。
    • src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、结构文件等。关于资源文件,详见资源分类与访问。
    • src > main > module.json5:Stage模子模块配置文件。重要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明,详见module.json5配置文件。
    • build-profile.json5:当前的模块信息、编译信息配置项,包括buildOption、targets配置等。其中targets中可配置当前运行环境,默认为HarmonyOS。
    • hvigorfile.ts:模块级编译构建任务脚本,开辟者可以自定义干系任务和代码实现。

  • hvigor : 项目插件配置
2.2 程序入口entry

DevEco 3.x 的项目中程序入口为默认的 entry 模块, 在DevEco 4.x 版本可以自定义名称为 app。
在 entry(app)模块的ets/entryability目录下的 EntryAbility.ts为程序入口:
  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import hilog from '@ohos.hilog';
  3. import window from '@ohos.window';
  4. export default class EntryAbility extends UIAbility {
  5.   onCreate(want, launchParam) {
  6.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  7.   }
  8.   onDestroy() {
  9.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  10.   }
  11.   onWindowStageCreate(windowStage: window.WindowStage) {
  12.     // Main window is created, set main page for this ability
  13.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  14.     windowStage.loadContent('pages/Index', (err, data) => {
  15.       if (err.code) {
  16.         hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
  17.         return;
  18.       }
  19.       hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
  20.     });
  21.   }
  22.   onWindowStageDestroy() {
  23.     // Main window is destroyed, release UI related resources
  24.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  25.   }
  26.   onForeground() {
  27.     // Ability has brought to foreground
  28.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  29.   }
  30.   onBackground() {
  31.     // Ability has back to background
  32.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  33.   }
  34. }
复制代码
此处为 UIAbility的子类, UIAbility组件是一种包含UI界面的应用组件,重要用于和用户交互。
UIAbility组件是体系调理的根本单元,为应用提供绘制界面的窗口;一个UIAbility组件中可以通过多个页面来实现一个功能模块。每一个UIAbility组件实例,都对应于一个近来任务列表中的任务。
在 entry 的 module.json5 配置中配置了入口, "mainElement": "EntryAbility",,
  1. {
  2.   "module": {
  3.     "name": "entry",
  4.     "type": "entry",
  5.     "description": "$string:module_desc",
  6.     "mainElement": "EntryAbility",
  7.     "deviceTypes": [
  8.       "phone",
  9.       "tablet"
  10.     ],
  11.     "deliveryWithInstall": true,
  12.     "installationFree": false,
  13.     "pages": "$profile:main_pages",
  14.     "abilities": [
  15.       {
  16.         "name": "EntryAbility",
  17.         "srcEntry": "./ets/entryability/EntryAbility.ts",
  18.         "description": "$string:EntryAbility_desc",
  19.         "icon": "$media:icon",
  20.         "label": "$string:EntryAbility_label",
  21.         "startWindowIcon": "$media:icon",
  22.         "startWindowBackground": "$color:start_window_background",
  23.         "exported": true,
  24.         "skills": [
  25.           {
  26.             "entities": [
  27.               "entity.system.home"
  28.             ],
  29.             "actions": [
  30.               "action.system.home"
  31.             ]
  32.           }
  33.         ]
  34.       }
  35.     ]
  36.   }
  37. }
复制代码

在 EntryAbility 的 onWindowStageCreate 函数中 指定了启动页面:
  1.   onWindowStageCreate(windowStage: window.WindowStage) {
  2.     // Main window is created, set main page for this ability
  3.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  4.     windowStage.loadContent('pages/Index', (err, data) => {
  5.       if (err.code) {
  6.         hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
  7.         return;
  8.       }
  9.       hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
  10.     });
  11.   }
复制代码
入口页面的内容为一个文本框:
  1. @Entry
  2. @Component
  3. struct Index {
  4.   @State message: string = 'Hello World'
  5.   build() {
  6.     Row() {
  7.       Column() {
  8.         Text(this.message)
  9.           .fontSize(50)
  10.           .fontWeight(FontWeight.Bold)
  11.       }
  12.       .width('100%')
  13.     }
  14.     .height('100%')
  15.   }
  16. }
复制代码

2.3 资源文件

资源文件存储在 entry/src/main/resources目录内,包含:


  • base : 通用的文件目录

    • element : 包含字符串,颜色等资源文件
    • media: 包含多媒体资源文件
    • profile : 包含 page内里的UI路由配置文件

  • 语言_国家: I18N资源文件

    • 子目录和base 雷同

  • rawfile : raw 资源文件目录
3. 构建配置

和Android项目雷同, 鸿蒙APP项目有应用级别构建配合和模块级别构建配置:


  • 根目录的 build-profile.json5
  • module 目录下的 build-profile.json5
3.1 应用构建配置

项目根目录 build-profile.json5文件为构建配置:
  1. {
  2.   "app": {
  3.     "signingConfigs": [],
  4.     "compileSdkVersion": 9,
  5.     "compatibleSdkVersion": 9,
  6.     "products": [
  7.       {
  8.         "name": "default",
  9.         "signingConfig": "default",
  10.       }
  11.     ]
  12.   },
  13.   "modules": [
  14.     {
  15.       "name": "entry",
  16.       "srcPath": "./entry",
  17.       "targets": [
  18.         {
  19.           "name": "default",
  20.           "applyToProducts": [
  21.             "default"
  22.           ]
  23.         }
  24.       ]
  25.     }
  26.   ]
  27. }
复制代码
API Version 9、API Version 8与API Version 4~7的构建体系不同,因此在设置编译构建信息时也存在差异:


  • API Version 9:需要对构建配置文件、构建脚本、应用依赖的共享包等信息进行设置。

    • build-profile.json5:应用/服务构建配置文件。
    • hvigorfile.ts:自定义编译构建脚本。
    • oh-package.json5:应用的三方包依赖,支持共享包的依赖。

  • API Version 8:需要对构建配置文件、构建脚本、应用依赖的npm包等信息进行设置。

    • build-profile.json5:HarmonyOS应用/服务构建配置文件。
    • hvigorfile.ts:自定义编译构建脚本。
    • package.json:应用的三方包依赖,支持HAR(遵照npm标准规范)和npm包的依赖。

  • API Version 4~7:需要通过build.gradle来对工程编译构建参数进行设置。
常用的字段说明如下:
  1. {
  2.   "app": {
  3.     //工程的签名信息,可包含多个签名信息
  4.     "signingConfigs": [  
  5.       {
  6.         "name": "default",  //标识签名方案的名称
  7.         "type": "HarmonyOS",  //标识HarmonyOS应用
  8.         //该方案的签名材料
  9.         "material": {  
  10.           "certpath": "D:\\SigningConfig\\debug_hos.cer",  //调试或发布证书文件,格式为.cer
  11.           "storePassword": "******",  //密钥库密码,以密文形式呈现
  12.           "keyAlias": "debugKey",  //密钥别名信息
  13.           "keyPassword": "******",  //密钥密码,以密文形式呈现
  14.           "profile": "D:\\SigningConfig\\debug_hos.p7b",  //调试或发布证书Profile文件,格式为.p7b
  15.           "signAlg": "SHA256withECDSA",  //密钥库signAlg参数
  16.           "storeFile": "D:\\SigningConfig\\debug_hos.p12"  //密钥库文件,格式为.p12
  17.         }
  18.       }
  19.     ],
  20.     "compileSdkVersion": 9,  //指定HarmonyOS应用/服务编译时的SDK版本
  21.     "compatibleSdkVersion": 9,  //指定HarmonyOS应用/服务兼容的最低SDK版本
  22.     //定义构建的产品品类,如通用默认版、付费版、免费版等
  23.     "products": [  
  24.       {
  25.         "name": "default",  //定义产品的名称,支持定制多product目标产物,具体请参考定制多目标构建产物
  26.         "signingConfig": "default",  //指定当前产品品类对应的签名信息,签名信息需要在signingConfigs中进行定义
  27.       }
  28.     ]
  29.   },
  30.   "modules": [
  31.     {
  32.       "name": "entry",  //模块名称
  33.       "srcPath": "./entry",  //标明模块根目录相对工程根目录的相对路径
  34.       "targets": [  //定义构建的APP产物,由product和各模块定义的targets共同定义
  35.         {
  36.           "name": "default",  //target名称,由各个模块的build-profile.json5中的targets字段定义
  37.           "applyToProducts": [  
  38.             "default"   //表示将该模块下的“default” Target打包到“default” Product中
  39.           ]
  40.         }
  41.       ]
  42.     }
  43.   ]
  44. }
复制代码
3.2 module构建配置

在 entry 模块的目录也有一个 build-profile.json文件:
  1. {
  2.   "apiType": 'stageMode',
  3.   "buildOption": {
  4.   },
  5.   "targets": [
  6.     {
  7.       "name": "default",
  8.       "runtimeOS": "HarmonyOS"
  9.     },
  10.     {
  11.       "name": "ohosTest",
  12.     }
  13.   ]
  14. }
复制代码
具体的字段说明如下:
  1. {
  2.   "apiType": 'faMode',  //API类型,支持FA和Stage模型
  3.   "showInServiceCenter": true,  //是否在服务中心展示
  4.   "buildOption": {
  5.     //配置筛选har依赖.so资源文件的过滤规则
  6.     "napiLibFilterOption": {
  7.       //按照.so文件的优先级顺序,打包最高优先级的.so文件
  8.       "pickFirsts": [
  9.         "**/1.so"
  10.       ],
  11.       //按照.so文件的优先级顺序,打包最低优先级的.so 文件
  12.       "pickLasts": [
  13.         "**/2.so"
  14.       ],
  15.       //排除的.so文件
  16.       "excludes": [
  17.         "**/3.so"
  18.       ],
  19.       //允许当.so重名冲突时,使用高优先级的.so文件覆盖低优先级的.so文件
  20.       "enableOverride": true
  21.     },
  22.     //cpp相关编译配置
  23.     "externalNativeOptions": {
  24.       "path": "./src/main/cpp/CMakeLists.txt",  //CMake配置文件,提供CMake构建脚本
  25.       "arguments": "",  //传递给CMake的可选编译参数
  26.       "abiFilters": [  //用于设置本机的ABI编译环境
  27.         "armeabi-v7a",
  28.         "arm64-v8a"
  29.       ],
  30.       "cppFlags": ""  //设置C++编译器的可选参数
  31.     },
  32.   },
  33.   "targets": [  //定义的Target,开发者可以定制不同的Target,具体请参考定制多目标构建产物
  34.     {
  35.       "name": "default",
  36.       "runtimeOS": "HarmonyOS",
  37.     },
  38.     {
  39.       "name": "ohosTest",
  40.     }   
  41.   ]
  42. }
复制代码

为了资助大家更深入有用的学习到鸿蒙开辟知识点,小编特意给大家准备了几套最新版的HarmonyOS NEXT学习资源
获取完整版高清学习门路,请点击→《HarmonyOS教学视频
HarmonyOS教学视频


鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程


鸿蒙生态应用开辟白皮书V2.0PDF:

获取白皮书:请点击→《鸿蒙生态应用开辟白皮书V2.0PDF

鸿蒙 (Harmony OS)开辟学习手册

一、入门必看

  • 应用开辟导读(ArkTS)
  • .……


二、HarmonyOS 概念

  • 体系定义
  • 技术架构
  • 技术特性
  • 体系安全


三、怎样快速入门?《鸿蒙底子入门学习指南》

  • 根本概念
  • 构建第一个ArkTS应用
  • .……


四、开辟底子知识

  • 应用底子知识
  • 配置文件
  • 应用数据管理
  • 应用安全管理
  • 应用隐私掩护
  • 三方应用调用管控机制
  • 资源分类与访问
  • 学习ArkTS语言
  • .……


五、基于ArkTS 开辟

  • Ability开辟
  • UI开辟
  • 公共事件与关照
  • 窗口管理
  • 媒体
  • 安全
  • 7.网络与链接
  • 电话服务
  • 数据管理
  • 背景任务(Background Task)管理
  • 设备管理
  • 设备使用信息统计
  • DFX
  • 国际化开辟
  • 折叠屏系列
  • .……


更多了解更多鸿蒙开辟的干系知识可以参考:《鸿蒙 (Harmony OS)开辟学习手册

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表