如何快速上手一个鸿蒙工程

发布于:2025-02-10 ⋅ 阅读:(35) ⋅ 点赞:(0)

    作为一名鸿蒙程序猿,当你换了一家公司,或者被交接了一个已有的业务。前辈在找你之前十分钟写了一个他都看不懂的交接文档,然后把一个鸿蒙工程交接给你了,说以后就是你负责了。之后几天你的状态大概就是下边这样的,一堆的需求和Bug朝你蜂拥而至。

程序员工作交接

     为了尽可能缩短这个阶段,新手鸿蒙开发的兄弟可以看看这篇文章,如何快速上手熟悉一个鸿蒙工程。主要是配置相关的内容,看完之后帮你快速找到程序的入口,便于分析后续的逻辑。

    本文的工程目录结构是目前最新的ArkTS Stage模型的工程目录结构,使用DevEco Studio 5.0.0 Release(2024年10月份发布)版本,不排除以后鸿蒙工程架构会升级,但是大的结构是不会变的 。

    官网的文档在这,大家也可以直接去官网看,讲得也挺清楚的 文档中心

1、主工程配置

AppScope目录是影响整个工程的,app.json目录相当于Android工程中的build.gradle文件,其中定义了工程的包名、版本号等一系列信息,具体的含义我都列出来了。

没有列出来的都是非必填项

{
  "app": {
    // 必填,应用的包名,用于唯一标识一个应用,类似于Android的packagename
    "bundleName": "com.example.arklearn",
    // 非必填,开发商描述
    "vendor": "example",
    // 必填,版本号,一个整数,同Android的versioncode
    "versionCode": 1000000,
    // 必填,版本名称,同Android的versionname
    "versionName": "1.0.0",
    // 必填,应用图标
    "icon": "$media:app_icon",
    // 必填,应用名称
    "label": "$string:app_name"
  }
}

更多关于app.json5的详细介绍可参见官方文档  文档中心

除了app.json5文件外,还有一个resource文件夹。没错,见名知意,这里边放的是整个工程都可以访问的资源文件,比如string值和图片等

2、程序入口

看完主工程的配置了,我需要进一步研究代码了,程序入口在哪呢

因为鸿蒙采用的应用/元服务这种逻辑结构,一个工程下边可以包含多个应用/元服务。每个应用/元服务可以打包成一个hap包独立运行。不讲太复杂了,记着一件事,Entry就是应用的主模块,作为应用的入口,提供了应用的基础功能。所以,程序入口就看这个entry-->src-->main目录下的module.json5文件

配置的具体含义我列一下

{
  "module": {
    // 非必填,这个元服务需要申请的权限列表,就是Android的Manifest文件中列的权限
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ],
    // 必填,当前module的名称
    "name": "entry",
    // 必填,标识当前Module的类型。支持的取值如下:
    // entry:应用的主模块
    // feature:应用的动态特性模块
    // har:静态共享包模块,android的aar
    // shared:动态共享包模块,android的so
    "type": "entry",
    // 非必填,当前module的描述信息
    "description": "$string:module_desc",
    // 非必填,但是一般都会填。标识当前Module的入口UIAbility名称,是在下边的abilities中定义的
    // 这个Ability相当于Android的Activity,
    "mainElement": "EntryAbility",
    // 必填,标识当前module可以运行在哪类设备上
    "deviceTypes": [
      "phone",
      "tablet",
      // 融合了屏幕触控和键鼠操作的二合一设备
      "2in1"
    ],
    // 必填,应用安装的时候这个module是不是默认安装,如果是入口的module,那就必须安装
    "deliveryWithInstall": true,
    // 必填,当前module是不是支持免安装特性,意思就是用的时候再安装。
    // 如果是一个元服务,这个地方可以为true,如果是应用,必须为false
    "installationFree": false,
    // 在有UIAbility的场景下必填,意思就是你声明的page都在哪放着呢
    // 当前这个配置标识,page声明是在当前module的
    // src/main/resources/base/profile/main_pages.json文件中存的
    "pages": "$profile:main_pages",
    // 一个数组,声明当前module有哪些ability,类似于android的acitvity
    "abilities": []
    }
}

看这个文件,你可以找到entry这个modue的入口Ability是EntryAbility

找到这个对应的EntryAbility类,进入看代码,具体每个回调函数的意思先不讲,跟Android Activity的回调比较像。

你就看onWindowStageCreate回调函数中,windowStage.loadContent的传参是什么。pages/Index,就表示,入口的page是Index

Index对应的文件目录是src/main/ets/pages/Index.ets

这样你就找到程序的入口了,进入看代码逻辑吧

3、常见目录和文件都放的什么

先看工程级别的全局配置

文件名称

说明

oh-package

这是一个文件夹,用于存放工程编译时依赖的三方库。具体依赖哪些库呢,是在oh-package.json5文件中定义的

build-profile.json5

工程级别的配置信息,包括签名、产品配置

hvigorfile.ts

工程级的编译构建任务脚本

具体想看如何配置签名文件,编译鸿蒙工程的,可以看我的这篇文章

鸿蒙工程签名编译和上架_鸿蒙对包进行签名-CSDN博客

oh-package.json5

描述全局配置,如:依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置

module级别的一些配置,以entry模块为例

文件名称

说明

src/main/ets

码的代码就在这放着呢

src/main/ets/entryability

应用/元服务的入口Ability,类似android的activity

src/main/ets/pages

应用/元服务包含的页面,就是你能看到的UI交互,类似android的fragment

src/main/resource

资源文件存放的目录,类似于android的res

resource/profile/main_pages.json5

所有的page都得在这个文件中注册

module.json5

上边有详细讲,应用/元服务的详细配置

build-profile.json5

module级别的配置信息,包括签名、产品配置

hvigorfile.ts

module级的编译构建任务脚本

oh-package.json5

描述module配置,如:依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置

基本上看到这,你就知道你接手的这个工程的入口在哪,有哪些page,用到的资源有哪些,签名编译情况,依赖了哪些三方库。剩下的就是看代码,赶紧入坑了


网站公告

今日签到

点亮在社区的每一天
去签到