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

    作为一名鸿蒙程序猿,当你换了一家公司,或者被交接了一个已有的业务。前辈在找你之前十分钟写了一个他都看不懂的交接文档,然后把一个鸿蒙工程交接给你了,说以后就是你负责了。之后几天你的状态大概就是下边这样的,一堆的需求和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,用到的资源有哪些,签名编译情况,依赖了哪些三方库。剩下的就是看代码,赶紧入坑了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

预训练语言模型——BERT

1.预训练思想 有了预训练就相当于模型在培养大学生做任务,不然模型初始化再做任务就像培养小学生 当前数据层面的瓶颈是能用于预训练的语料快被用完了 现在有一个重要方向是让机器自己来生成数据并做微调 1.1 预训练(Pre - training)vs. 传…

关于FPGA(现场可编程门阵列)工程技术人员的详细介绍

一、FPGA工程技术人员概述 FPGA工程技术人员是专注于现场可编程门阵列(FPGA)设计、开发、测试及优化的专业技术人员。他们利用FPGA的灵活性和可编程性,为各种应用创建高效、定制化的硬件解决方案。 二、主要工作任务 FPGA逻辑设计&#xf…

机器学习模型评估指标

模型的评估指标是衡量一个模型应用于对应任务的契合程度,常见的指标有: 准确率(Accuracy): 正确预测的样本数占总样本数的比例。适用于类别分布均衡的数据集。 精确率(Precision): 在所有被预测为正类的样…

基于html5实现音乐录音播放动画源码

源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI,点击按钮后,会变成为一个监听按钮。旁边会有音符飞入这个监听按钮,最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码

基于深度学习的视觉检测小项目(六) 项目的信号和变量的规划

• 关于前后端分离 当前流行的一种常见的前后端分离模式是vueflask,vueflask模式的前端和后端之间进行数据的传递通常是借助 API(应用程序编程接口)来完成的。vue通过调用后端提供的 API 来获取或提交数据。例如,前端可能通过发送…

文件传输速查表:Windows 和 Linux

文件传输速查表:Windows 和 Linux 免责申明 本文章仅供网络安全相关学习与研究使用,旨在促进技术交流与安全知识普及,严禁将本文内容及相关工具用于未授权的渗透测试或任何违法活动。 重要声明: 由于传播、使用本文章所提供的信…

基于SpringBoot+Vue的“有光”摄影分享网站系统

基于SpringBootVue的“有光”摄影分享网站系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&#x1f345…

课题推荐——基于GPS的无人机自主着陆系统设计

关于“基于GPS的无人机自主着陆系统设计”的详细展开,包括项目背景、具体内容、实施步骤和创新点。如需帮助,或有导航、定位滤波相关的代码定制需求,请点击文末卡片联系作者 文章目录 项目背景具体内容实施步骤相关例程MATLAB例程python例程 …

腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器

作品简介 在CTFer选手比赛做crypto的题目时,一些题目需要自己去解密,但是解密的工具大部分在线上,而在比赛过程中大部分又是无网环境,所以根据要求做了这个工具 技术架构 python语言的tk库来完成的GUI页面设计,通过…

《机器学习》集成学习之随机森林

目录 一、集成学习 1、简介 2、集成学习的代表 3、XGBoost和随机森林的对比 相同点: 不同点: 二、Bagging之随机森林 1、简介 2、随机森林的核心思想 3、随机森林生成步骤 4、随机森林的优点 5、随机森林的缺点 三、随机森林的代码实现 1、…

四、VSCODE 使用GIT插件

VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git,就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …

JS进阶--JS听到了不灭的回响

作用域 作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 作用域分为局部和全局 局部作用域 局部作用域分为函数和块 那 什么是块作用域呢? 在 JavaScript 中使用 { } 包裹的代码称为代码块…

《自动驾驶与机器人中的SLAM技术》ch1:自动驾驶

目录 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 1.1 自动驾驶技术 1.2 自动驾驶中的定位与地图 L2 在技术实现上会更倾向于实时感知,乃至可以使用感知结果直接构建鸟瞰图(bird eye view, BEV),而 L4 则依赖离线地图。 高精地…

【合作原创】使用Termux搭建可以使用的生产力环境(九)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(八)-CSDN博客中我们讲到了如何安装IDEA社区版,并在Termux中安装VNC服务器,在proot-distro的Debian中启动xfce桌面,并通过这个方式解决了IDEA社区版中无…

生成模型:变分自编码器-VAE

1.基本概念 1.1 概率 这里有: x为真实图像,开源为数据集, 编码器将其编码为分布参数 x ^ \hat{x} x^为生成图像, 通过解码器获得 p ( x ) ^ \hat{p(x)} p(x)^​: 观测数据的分布, 即数据集所构成的经验分布 p r e a l ( x ) p_{real}(x) preal​(x): …

中国省级产业结构高级化及合理化数据测算(2000-2023年)

一、数据介绍 数据名称:中国省级产业结构高级化、泰尔指数 数据年份:2000-2023年 数据范围:31个省份 数据来源:中国统计年鉴、国家统计局 数据整理:内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xf…

高级数据库系统 复习提纲

第一章 数据库技术的回顾与发展 简述三代数据库的发展历史及其对应特点: 新型数据库在“数据模型”上的创新: 简述数据库和什么相关技术结合,产生了什么新型数据库? 1. 数据库和并行处理技术结合,产生“并行数据库”…

C++实现图书管理系统(Qt C++ GUI界面版)

前瞻 本项目基于【C】图书管理系统(完整版) 图书管理系统功能概览: 登录,注册学生,老师借书,查看自己当前借书情况,还书。管理员增加书,查看当前借阅情况,查看当前所有借阅人,图书信息。 效果…

【LeetCode: 560. 和为 K 的子数组 + 前缀和 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…