鸿蒙应用开发DevEco Studio工程目录模块介绍

面向开发者,HarmonyOS 推出了 DevEco Studio 和 Dev Device Tool 两款开发工具,前者目前迭代至 3.1 版本(对外开放版本),用于开发 HarmonyOS 应用;后者用于开发智能设备

在这里插入图片描述
应用的工程主体结构如上图

在这里我们可以看到有几个主要的模块,就是AppScopeentry 目录, 还有oh_modules 这三个主要的目录。
在这里有两个隐藏文件.hvigor这个是发布时候存储配置构建文件信息的目录
.idea是一个开发工具有关的配置就放在这两个里面

在这里插入图片描述

AppScope 目录包含一个 app.json5 文件和 resources 文件夹 。这个文件存放的是全局的公共资源的文件

  • app.json5 用来配置应用的 bundle 名称(可以理解为应用包名)、bundleType 可以设置为 app 和 atomicService,用于标识应用是普通应用或元服务;其他信息主要是应用的版本信息、SDK 支持版本、应用图标和名称、设备特殊配置以及是否支持多工程联合开发等

  • resources 目录 存放公共类型资源文件,module 中 media 的图片 icon 资源不能和该目录下 media 中的 icon 重名

    • elements一般存放一些字符类型的资源
    • media 一般存放图片视频这些媒体资源

app.json5 存放的是这个hap的一些全局工具资源的配置

{
  "app": {
    "bundleName": "com.example.myapplication",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name"
  }
}

在这里插入图片描述
entry 目录是当前工程中的一个 module,一个工程允许包含一个 entry 类型 module 和 多个 feature 类型module,前者表示是应用的主模块,后者是应用的动态特性模块;该目录下包含了这个module所有的代码、文本、多媒体、图片、配置等各种资源;

在这里main 目录下面包含的是这个APP主要模块的代码,ohosTest 包含的是这个模块对应的测试代码。

我们可以发现在这里有一个oh-package.json5的文件,这个表示的是这个模块配置的第三方依赖的文件。但是我们还可以发现一个整个项目的配置依赖文件, 下面这个是工程级 oh-package.json5

在这里插入图片描述

这个模块需要使用第三方库,那么我们可以看到这样的引用方式

{
  "license": "",
  "devDependencies": {},
  "author": "",
  "name": "entry",
  "description": "Please describe the basic information.",
  "main": "",
  "version": "1.0.0",
  "dependencies": { //在大括号内添加依赖
     "@ohos/lottie": "^2.0.0"
    } 
}

b4539a21d938410db21bcbb8d3ff5ee6.png)

hvigor 目录: hvigor 是一款基于任务管理机制实现的一套自动化构建工具(基于TypeScript + npm 包管理机制实现的轻量化前端构建工具),HarmonyOS 在迭代时,使用它替代 Gradle。该目录下有2个配置文件:

  • hvigor-config.json5:会以插件形式引入 hvigor 构建工具并且标识其版本;

  • hvigor-wrapper.js:是一个 js 脚本文件,与 hvigor相关的包装器

HarmonyOS API Version 8 ~ 9 采用 Hvigor构建工具和构建插件(hvigor-ohos-plugin)组成,该插件利用Hvigor的任务编排机制实现应用/服务构建任务流的执行,完成HAP/APP的构建打包,应用于应用/服务的构建。使用该插件需要在 hvigor 目录下 hvigor-config.json5 中配置。

{
  “hvigorVersion”: "2.2.1",
  "dependencies": {
        "@ohos/hvigor-ohos-plugin": "2.2.1"
  }
}

**oh_modules:**用于存放三方库依赖信息


一些其他的文件信息

**build-profile.json5:**是应用的构建配置脚本,其中配置了应用签名信息、编译和适配 SDK 版本,构建产物以及多个 module 信息,在这里还可以配置不同 module 的多 target 构建信息

build-profile.json5 的 buildOption 中还可以配置 HAP 依赖的/需要排除的 .so 文件以及CPP相关配置。

{
  "apiType": 'stageMode',
  "buildOption": {
  },
  //使用 target 构建多目标产物
  "targets": [
    {
      "name": "default",
      "runtimeOS": "HarmonyOS"
    },
    {
      "name": "free",
      "runtimeOS": "HarmonyOS",
      "config": {
        "deviceType": [
          "phone"
        ]
      }
    },
    {
      "name": "pay",
      "runtimeOS": "HarmonyOS",
      "config": {
        "deviceType": [
          "phone"
        ]
      },
      "source": {
        //定义多目标产物的源码集,不同版本产物,可定义不同的源码集
        "pages": [
          "pages/Index",
          "pages/home/AbilityPage",
          "pages/home/NewsPage"
        ]
      },
//      定义多目标构建产物的资源目录
      "resource": {
        "directories": [
          "./src/main/resources_default"
        ]
      }
    },
    {
      "name": "ohosTest",
    }
  ]
}


HarmonyOS 要求在工程级别 build-profile.json5 文件中配置调试或发布证书、密钥库文件和密钥等信息。

"material": {
          "certpath": "abc.cer", //华为颁发的数字证书
          "storePassword": "********", //密钥库密码,会以密文形式呈现
          "keyAlias": "alias",
          "keyPassword": "********",  //密钥密码,会以密文形式呈现
          "profile": "abc.p7b", //
          "signAlg": "SHA256withECDSA",
          "storeFile": "abc.p12" //本地生成密钥库
        }

签名配置流程和配置证书等信息说明

首先在 DevStudio 执行 Build -> Generate Key and CSR , 分别生成本地密钥库(.p12 后缀文件)和 证书请求文件(.csr 后缀文件,Certificate Signing Request)

在这里插入图片描述

在这里插入图片描述

密钥库: 包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,公钥和私钥对用于数字签名和验证;

证书请求文件:包含密钥对中的公钥和公共名称、组织名称、组织单位等信息,用于向AppGallery Connect申请数字证书;

申请华为数字证书:登录华为开发者联盟,向 AppGallery Connect -> 用户与访问 -> 证书管理 -> 新增证书 按照流程申请华为的数字证书,在申请时要选择提交本地 证书请求文件;

申请 Profile 文件:AppGallery Connect -> 我的项目 -> HAP Provision Profile 申请 Profile 文件,申请时要选择对应的华为数字证书

以上信息的配置还可以使用 DevEco Studio 的签名面板自动进行配置:

需要注意的是,使用签名面板自动配置,必须通过USB 接口连接可调试设备(可调试设备需要在 华为网站进行绑定)。
勾选 Automatically generate signature 后会自动生成相关信息,之后点击 apply 或 ok 即可。

hvigorfile.ts:应用级的编译构建人物脚本

hvigorw 和 hvigorw.bat: Hvigor 构建工具的可执行文件和批处理文件

在这里, 有bat的这个表示的是Windows下的执行脚本

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Hvigor startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

set WRAPPER_MODULE_PATH=%APP_HOME%\hvigor\hvigor-wrapper.js
set NODE_EXE=node.exe

goto start

:start
@rem Find node.exe
if defined NODE_HOME goto findNodeFromNodeHome

%NODE_EXE% --version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute

echo.
echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH.
echo.
echo Please set the NODE_HOME variable in your environment to match the
echo location of your NodeJs installation.

goto fail

:findNodeFromNodeHome
set NODE_HOME=%NODE_HOME:"=%
set NODE_EXE_PATH=%NODE_HOME%/%NODE_EXE%

if exist "%NODE_EXE_PATH%" goto execute
echo.
echo ERROR: NODE_HOME is not set and no 'node' command could be found in your PATH.
echo.
echo Please set the NODE_HOME variable in your environment to match the
echo location of your NodeJs installation.

goto fail

:execute
@rem Execute hvigor
"%NODE_EXE%" %WRAPPER_MODULE_PATH% %*

if "%ERRORLEVEL%" == "0" goto hvigorwEnd

:fail
exit /b 1

:hvigorwEnd
if "%OS%" == "Windows_NT" endlocal

:end

没有bat的这个文件就是我们Linux下的执行脚本。

#!/bin/bash

# ----------------------------------------------------------------------------
#  Hvigor startup script, version 1.0.0
# 
#  Required ENV vars:
#  ------------------
#    NODE_HOME - location of a Node home dir
#    or 
#    Add /usr/local/nodejs/bin to the PATH environment variable
# ----------------------------------------------------------------------------

HVIGOR_APP_HOME=$(dirname $(readlink -f $0))
HVIGOR_WRAPPER_SCRIPT=${HVIGOR_APP_HOME}/hvigor/hvigor-wrapper.js
warn() {
	echo ""
	echo -e "\033[1;33m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}

error() {
	echo ""
	echo -e "\033[1;31m`date '+[%Y-%m-%d %H:%M:%S]'`$@\033[0m"
}

fail() {
	error "$@"
	exit 1
}

# Determine node to start hvigor wrapper script
if [ -n "${NODE_HOME}" ];then
   EXECUTABLE_NODE="${NODE_HOME}/bin/node"
   if [ ! -x "$EXECUTABLE_NODE" ];then
       fail "ERROR: NODE_HOME is set to an invalid directory,check $NODE_HOME\n\nPlease set NODE_HOME in your environment to the location where your nodejs installed"
   fi
else
   EXECUTABLE_NODE="node"
   which ${EXECUTABLE_NODE} > /dev/null 2>&1 || fail "ERROR: NODE_HOME is not set and not 'node' command found in your path"
fi

# Check hvigor wrapper script
if [ ! -r "$HVIGOR_WRAPPER_SCRIPT" ];then
	fail "ERROR: Couldn't find hvigor/hvigor-wrapper.js in ${HVIGOR_APP_HOME}"
fi

# start hvigor-wrapper script
exec "${EXECUTABLE_NODE}" \
	"${HVIGOR_WRAPPER_SCRIPT}" "$@"

这两个文件是用来做ohpm编译构建的执行的工具,实际上功能是完全一样的。

local.properties:项目的私有属性配置文件,默认会配置 nodejs 的安装目录以及 harmonyOS SDK;

**oh-package.json5:**用于编译和构建项目,内部配置了模块级的依赖文件(即三方库声明文件的入口和包名)

**oh-package-lock.json5:**是一个树形结构文件,用于描述项目依赖关系。文件包含了项目的所有依赖项和它们的版本信息。通过该文件,可以确保项目在不同环境中的构建一致性,并避免潜在的版本冲突问题。



无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程 https://www.cbedai.net/chichoxian

References

  1. https://www.bilibili.com/video/BV1Zc411v7wv?p=8&spm_id_from=pageDriver&vd_source=57623809cb42c86b58d359b44bfd8dcf
  2. https://juejin.cn/post/7322156771614392371

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

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

相关文章

flutter开发实战-GetX响应式状态管理使用

flutter开发实战-GetX响应式状态管理使用 GetX是一个简单的响应式状态管理解决方案。GetX是Flutter的一款超轻、功能强大的解决方案。它将高性能状态管理、智能依赖注入和路由管理快速而实用地结合在一起。这里简单使用一下GetX 一、引入GetX 在工程的pubspec.yaml中引入插件…

Python中的分布式爬虫系统Scrapy与分布式任务队列的结合

随着互联网的不断发展,网络爬虫在数据采集和信息挖掘中发挥着重要作用。然而,单机爬虫往往难以应对大规模数据抓取的需求,因此,构建分布式爬虫系统成为了一种必然选择。本文将介绍如何利用 Python 中的 Scrapy 框架和分布式任务队…

TikTok自动评论、回复的脚本怎么制作?

在当今数字化的时代,社交媒体平台如TikTok已经成为人们日常生活的一部分,为了更有效地在TikTok上进行营销或互动,许多用户和企业开始寻找自动化工具,如自动评论和回复的脚本,以节省时间并提高效率。 本文将科普如何制…

H5 处理点击元素高亮、自定义按钮、去除焦点边框

1、设置移动设备上点击元素时出现的高亮颜色 *{-webkit-tap-highlight-color: transparent; }2、如果你想要自定义按钮的样式,你可以使用 -webkit-appearance: none; 来移除按钮的默认样式 .button {-webkit-appearance: none;appearance: none; /* 兼容性更好的通…

C语言 | Leetcode C语言题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; static inline int Min(const int a, const int b, const int c) {int min (a < b) ? a : b;return (min < c) ? min : c; }int minDistance(char * word1, char * word2){int m strlen(word1), n strlen(word2);int dp[m 1][n…

知识蒸馏,需要合适的教师模型,学生模型,蒸馏数据,损失函数,训练策略,让小模型有大模型的知识

知识蒸馏使用的是Teacher—Student模型&#xff0c;其中teacher是“知识”的输出者&#xff0c;student是“知识”的接受者。知识蒸馏的过程分为2个阶段: 原始模型训练: 训练"Teacher模型", 它的特点是模型相对复杂&#xff0c;也可以由多个分别训练的模型集成而成。…

C++_红黑树的学习

1. 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍 &…

【活动】如何通过AI技术提升内容生产的效率与质量

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何通过AI技术提升内容生产的效率与质量引言一、自然语言处理&#xff08;NLP&…

JAVA排序相关习题7

1.插入排序 1.1 基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 /*** 时间复杂度&…

自然资源-地质勘查工作的流程梳理

自然资源-地质勘查工作的流程梳理 地质勘查从广义上可理解为地质工作&#xff0c;地质队员就好像是国家宝藏的“寻宝人”&#xff0c;通过地质勘查&#xff0c;为国家找矿&#xff0c;以保障国家能源资源安全和服务国计民生&#xff0c;发挥着地质工作在国民经济建设中的基础性…

跟TED演讲学英文:Teachers need real feedback by Bill Gates

Teachers need real feedback Link: https://www.ted.com/talks/bill_gates_teachers_need_real_feedback Speaker: Bill Gates Date: May 2013 文章目录 Teachers need real feedbackIntroductionVocabularyTranscriptSummary后记 Introduction Until recently, many teach…

电子版图书制作,一键转换可仿真翻页的画册

在数字化浪潮的冲击下&#xff0c;传统纸质图书逐渐被电子版图书取而代之。电子版图书以其便携、环保、更新快速等特点&#xff0c;吸引了越来越多的读者。制作一款既具备电子图书的便捷性&#xff0c;又能仿真翻页的画册&#xff0c;成为当下图书出版行业的新趋势 1.要制作电子…

企业数据保护,从严防内部信息泄露开始

在当今的数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随之而来的是数据安全威胁&#xff0c;尤其是内部信息泄露&#xff0c;这不仅会导致企业面临巨大的经济损失&#xff0c;还可能损害企业的品牌形象和客户信任。因此&#xff0c;从严防内部信息…

56 关于 linux 的 oom killer 机制

前言 这里主要讲的是 linux 的 oom killer 机制 在系统可用内存较少的情况下&#xff0c;内核为保证系统还能够继续运行下去&#xff0c;会选择杀掉一些进程释放掉一些内存。 通常oom_killer的触发流程是&#xff1a;进程A想要分配物理内存&#xff08;通常是读写内存&#…

新能源汽车中HEV与PHEV分别代表什么车型,它们与传统燃油车都有什么区别?

前言 新能源汽车正逐渐成为全球汽车工业的主流方向&#xff0c;而HEV&#xff08;Hybrid Electric Vehicle&#xff09;和PHEV&#xff08;Plug-in Hybrid Electric Vehicle&#xff09;这两种混合动力车型在这一转型过程中扮演着重要角色。下面我们详细探讨HEV与PHEV的定义&a…

基于FPGA的视频矩阵 视频拼接 无缝切换解决方案

视频矩阵 视频矩阵 视频拼接 无缝切换 1. 最大支持144路HDMI视频输入&#xff0c;最大支持144路路HDMI输出&#xff0c;完全交叉切换。 2. 与包括1080p/60的所有HDTV分辨率和高达1920*1200的PC的分辨率兼容&#xff1b; 3. 支持HDMI 1.3a、HDCP 1.3、HDCP 1.4、以及DVI 1.0协…

如何使用visual vm和jstat进行远程监控

如何使用visual vm和jstat进行监控 安装visual vm 好像从jdk某个版本开始&#xff0c;jdk的bin目录下就不自带jvisualvm了&#xff0c;需要从官网下载一个visual vm。 打开visual vm Local是你本地的&#xff0c;无需多言。 先准备下必备的插件 如何通过visual vm观测远程…

Prometheus监控Kubernetes Pod状态

本文将介绍如何配置Prometheus的告警规则&#xff0c;实现对于Kubernetes Pod状态的监控。 1.Pod的状态类型 在Prometheus 监控Kubernetes Pod 状态时&#xff0c;通常可以观察到以下几种状态情况&#xff1a; 1. Running&#xff08;运行中&#xff09; Pod 处于运行状态意…

Spring Framework-IoC详解

IoC的概念和作用 在介绍Ioc之前&#xff0c;我们首先先了解一下以下内容 什么是程序的耦合 耦合性(Coupling)&#xff0c;也叫耦合度&#xff0c;是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度…

Java毕业设计 基于SpringBoot vue新能源充电系统

Java毕业设计 基于SpringBoot vue新能源充电系统 SpringBoot 新能源充电系统 功能介绍 首页 图片轮播 充电桩 充电桩类型 充电桩详情 充电桩预约 新能源公告 公告详情 登录注册 个人中心 余额充值 修改密码 充电桩报修 充电桩预约订单 客服 后台管理 登录 个人中心 修改密码…
最新文章