鸿蒙开发从入门到跨平台系列第一篇:深入了解鸿蒙项目的核心结构看着鸿蒙项目一脸懵逼?想修改不知道该从什么地方改起?这篇文章

鸿蒙开发的IDE叫做DevEcoStudio,它是基于IntelliJIDEACommunity的开源版本打造,和AndroidStudio血脉相通,因此做过Android开发或者使用过IDEA的工程师们切换到鸿蒙开发时,会发现查看项目目录、文件结构、调试/运行、设备选择、日志、命令行等都是相同的位置,像回家一样自然,非常顺滑。

新建项目页面也类似:

上两图是开发鸿蒙和Android应用时新建项目的页面,可以看到两者很相似。在鸿蒙中,Ability类似Android的Activity,IDE提供了一些典型业务的Ability实例工程;另外鸿也提供了类似JNI的NApi工程,用于开发需要调用C++的项目。

当我们使用DevEcoStudio新建一个鸿蒙项目后,创建的项目长这样:

按照上图中从上往下的顺序(忽略前两个文件夹.hvigor.idea,不重要),第一个比较重要的文件夹是AppScope:

AppScope的作用是配置app的核心信息,包括唯一标识(bundleName)、版本号、icon和名称等等。新建项目后我们一般都会修改这些内容,这时候就需要修改上图中的app.json5文件。

.json5是鸿蒙项目中配置文件的格式,这个格式结尾的文件就是配置文件(好像是句废话哈哈).

第二个重要的文件夹是entry,它是鸿蒙项目的默认入口代码目录,内容比较多我们稍后介绍。

第三个文件夹是hvigor。

hvigor是鸿蒙项目的构建工具(可以类比Gradle),支持使用JavaScript/TypeScript开发配置脚本。

根目录下的hvigor文件夹用来配置构建工具的版本号、用到的插件、执行配置、日志配置、调试配置等信息:

当我们需要升级hvigor本身或者官方构建插件(@ohos/hvigor-ohos-plugin)的版本号时,需要去hvigor/hvigor-config.json5文件中修改(文件内容见上图右侧)。

hvigor依赖node,因此在开发鸿蒙项目时我们需要安装并配置node环境。

了解hvigor是什么后,接下来看下项目根目录下的hvigorfile.ts文件。

hvigorfile.ts是用来配置项目的构建校本,我们可以在其中创建自定义的task和plugin(两者差不多,不同在于plugin方便项目之间复用),然后添加到项目的构建流程中。

由于配置文件是ts文件格式,因此自定义hvigor构建task很简单,只需要定义一个pluginId、实现run方法即可。

在上图中,我们的myTask函数就是一个自定义的task,它的id是myTask,然后在任务的执行方法里打印了一条日志。

自定义plugin也是类似的,区别在于需要继承HvigorPlugin:

自定义task/plugin函数以后,我们把它添加到导出的plugins数组即可。

了解hvigor及hvigorfile.ts文件后,接下来我们看看根目录下另外比较重要的两个文件。

build-profile.json5用来配置app的签名信息、使用的SDK版本号、构建模式和多module信息。

签名信息配置在signingConfigs中:

{"app":{//工程的签名信息,可包含多个签名信息"signingConfigs":[{"name":"default",//标识签名方案的名称,用户可自定义"type":"HarmonyOS",//标识HarmonyOS应用//该方案的签名材料"material":{"certpath":"D:\\SigningConfig\\debug_hos.cer",//调试或发布证书文件,格式为.cer"storePassword":"******",//密钥库密码,以密文形式呈现"keyAlias":"debugKey",//密钥别名信息"keyPassword":"******",//密钥密码,以密文形式呈现"profile":"D:\\SigningConfig\\debug_hos.p7b",//调试或发布证书Profile文件,格式为.p7b"signAlg":"SHA256withECDSA",//密钥库signAlg参数"storeFile":"D:\\SigningConfig\\debug_hos.p12"//密钥库文件,格式为.p12}}],}}如上图所示,签名信息可以有多个,每个配置信息主要包括它的名称、使用的证书和密钥信息、密码等文件。

构建模式配置在buildModeSet中:

build-profile.json5中最后一个关键的配置信息是modules,即模块配置信息。

在大点的项目里一般会有多个模块,当我们新建一个模块后,就需要在build-profile.json5文件的modules属性中加一个配置:

"modules":[{"name":"entry",//模块名称,须与模块中module.json5文件中的module.name保持一致"srcPath":"./entry",//标明模块根目录相对工程根目录的相对路径"targets":[//定义构建的APP产物,由product和各模块定义的targets共同定义{"name":"default",//target名称,由各个模块的build-profile.json5中的targets字段定义"applyToProducts":["default"//表示将该模块下的“default”Target打包到“default”Product中]}]}]配置信息包括模块名称、路径、产物信息等。

比较可惜的是,目前build-profile.json5文件还不支持条件语句,这在大型项目编译时可是刚需啊。毕竟很多时候业务只想编译自己用到的那几个模块,如果能像Gradle一样根据properties文件里的值修改配置信息就好了,希望华为可以早点支持这个功能。

一个项目里会有多个oh-package.json5文件,除了根目录下,每个模块都有自己的oh-package.json5文件。

当模块有导出文件时,就需要在oh-package.json5的main属性填写要导出的文件名称,比如index.ets。

ohpm是鸿蒙的包管理工具,类似npm。

当我们在不同项目里用到同一个三方库时,为了避免版本冲突,可以在项目根目录下的oh-package.json5里强制指定版本号:

上图中在overrides中配置的三方库版本号将作为最终使用的版本。

介绍完上面的文件和文件夹作用后,终于到了最重要的entry目录:

entry的名字不一样,重点是它的内容,每个新建的模块一样。

从上图可以看到,entry目录下也有build-profile.json5、hvigorfile.ts和oh-package.json5文件,这是因为在鸿蒙项目里,每个模块可以单独配置自己的构建流程和依赖信息。

模块中最重要的配置文件却不在这三者之间,而是src/main/module.json5。

module.json5文件用来配置一个模块的名称、类型、进程信息和入口等,其中比较关键的配置有这些:

UIAbility的配置信息有这些:

UIAbility的启动模式有三种:

skills标签表示UIAbility被启动时能够接收的Want特征,那什么是Want呢?

Want是在组件启动时传递的对象,比如在UIAbilityA中要启动UIAbilityB时,可以通过定义一个Want对象传递数据给UIAbilityB。

根据是否指定要打开的Ability信息,Want分为两种:

可以看到,鸿蒙的Want类似Android的Intent。

"skills":[{"entities":["entity.system.home"],"actions":["action.system.home"]}]actions表示能够接收的行为,包括系统预定义的和自定义的。entities和它类似,暂时没搞清楚两者区别。

一个app可以配置多个具有入口能力的skills标签(即配置了ohos.want.action.home和entity.system.home)。

OK,这就是一个模块的module.json5文件核心属性。

介绍完上面的内容,entry文件夹中剩下的就是cpp、ets和resources文件夹。

THE END
1.我为您重新生成了一个标题,揭秘2024年全网最低价业务平台,消费全网最低价业务平台揭秘 2024最划算业务平台详解 1、引言 - 背景介绍 - 目的与意义 2、平台概述 - 平台定义与功能 - 主要用户群体 - 市场定位与优势 3、核心特点 - 实时价格更新机制 - 多平台比价系统 - 用户评价与反馈系统 4、使用指南 - 注册与登录流程 - 搜索与筛选商品 - 下单与支付流程 5、成功案例http://m.bco.tuokeb2b.com/post/56451.html
2.独立站电商系统:一站式解决方案,破解贸易难题社交电商集成:无缝链接社交媒体平台,扩大品牌曝光。 营销工具箱 搜索引擎优化:内置SEO工具,提升网站搜索排名。 邮件营销:自动化邮件发送,维护客户关系,刺激复购。 支付与物流 多元支付选项:集成多种支付网关,便捷交易。 物流追踪:全程可视化物流管理,提升购物体验。 https://www.linkseeks.com/article-3276.html
3.变速箱也有横纵之分你知道吗?横置纵置都有啥好处?首先纵置双离合的体积比横置双离合更大,但因为是纵向布置,所以它所占用的空间,与横置平台下并没有太多的可比性,但是体积更大了,可布置的散热渠道也更大,其次是DL382还有独立的冷却回路,因为变速箱散热不仅仅是离合器片散热和齿轮散热,对于内部的电子元件也起到散热作用,所以纵置变速箱的内部散热效率也更高。 https://www.dongchedi.com/article/7035949054232396324
4.Java面试题详解超全200题PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明: https://blog.csdn.net/LearnMore666/article/details/105488723
5.头条文章以小米SU7 Max为例,全系都采用全球顶级品牌的轮胎,即使配备21"倍耐力P ZERO 5代运动胎,也能实现 725km CLTC续航,并且媒体实测中实现了接近500km的高速续航和超过550km的城市高速综合续航,表现极其优异。 ? ?15 ?电压平台接近,小米SU7标准版为什么能比特斯拉Model 3的充电要快不少? https://card.weibo.com/article/m/show/id/2309405031537782685731
6.打招呼美团饿了么外卖某小说平台名下的 980+ 个公众号 累计近20000 个公众号 他们都在用 《精准打招呼》 粉丝变现 每天超过2000万的粉丝看到打招呼的推送 你还在等什么? 售前QQ群有来自已购买客户分享的 【如何使用精准打招呼轻松月入10w+的套路解析】 感兴趣的同学一定要进群索要~ http://www.zhiwu55.com/html/w7/addons/0d7363894acdee742caf7fe4e97c4d49.html
7.双非本科跨专业5面京东,8600小时后收到通知,流下喜悦泪水8、没有系统的学习,学了Java基础,就靠刷面经、刷左神视频、B站视频等,太难了,虽然最后拿了不少offer,但是都是白菜价,太难了!!!大家一定要好好准备 关于算法部分,其实要准备的细节内容非常多,所以我也花了不少心思整理了一份关于算法方面的宝典,这份资料我对算法的认识以及我的学习方法,除了Leetcode以外,大厂喜https://maimai.cn/article/detail?fid=1632778078&efid=DWfu7WeSgiHv2qWOUabF1g
8.吐血整理!今年两会上,佛教界代表委员都说了啥?这要求我们自觉以社会主义核心价值观为引领,立足新时代,坚守佛教信仰,远离商业化,在促进社会团结和谐、服务经济社会发展方面发挥积极作用。他建议,通过政协平台大力宣传宗教中国化的内涵,宣传宗教界人士和信教群众促进社会稳定和谐发展的典型事例。 全国人大代表静波法师:八条建议提升宗教干部素质https://fo.ifeng.com/c/7l3mp3DUjbM
9.综合评价招生是什么意思?什么样的学生适合走综评?答:综合评价认可度较高的文科赛事有叶圣陶杯、语文报杯、全国中学生创新作文、”外研社杯“外语素养大赛等,主要为白名单赛事。 20、有学科竞赛省级二等奖可以参加综合评价吗? 答:考生只要综合成绩好都可以尝试的。考生具备学科竞赛省级二等奖在高校综合评价初审和校测时有很大的积极作用。 https://m.gk100.com/read_275849920.htm
10.很多人都在做电商,但LOGO对电商的重要性,你知道多少?香奈儿、阿玛尼、LV等等等这些是品牌里的大牌,only、zara、H&M等等这些是品牌里的大众品牌,天猫、京东这些是电商平台里的大品牌,三只松树、韩都衣舍等等这些是名副其实的电商品牌,他们都有自己的logo设计规范和品牌定位,而到底什么是品牌呢?我想微信公众平台首页的那句slogan最能告诉我们答案——再小的个体,也有自己https://logo.xwzn.cn/zixun/866.html
11.淘宝刷单都有哪些软件?各有什么优势?流量助手刷单平台很多商家都使用过,这是个老平台了,8年多,口碑也不错。简单来说,该平台的主要功能就是通过提升店铺的关键词排名和综合排名,来吸引更多的消费者下单,促进自然订单的成交。 有提升店铺宝贝排名人气需求的,这里推荐补排名:http://liuliang.zhushou005.xyz/login.html(仅限商家)专业流量提升平台,多年https://www.maijia.com/article/478747
12.西安市优质教育资源共享平台早睡早起,适当接受阳光照射(避开太阳直射,注意防暑),以顺应阳气的充盛,利于气血的运行,振奋精神。夏日昼长夜短,中午小憩可助恢复疲劳,有利于健康。 2.祛湿护心,注意饮食 平时吃饭的食材中,有祛湿作用的红豆、薏米、冬瓜、豆类、鲤鱼等都是非常好的食材,切记不宜过食生冷、油腻的食物,以免助湿伤脾。 http://www.xaeduyun.cn/s4buq/acommonapp/csite/ablog/cblog/ablog/cblog.mblogBrowse.do?blogid=2c90815f7623815901764b84ce87087b
13.每日热点0403此次会议是在国家卫生健康委科教司、国家科技基础条件平台中心等主管部门支持下,由国家病原微生物保藏中心组织召开的一次专题研讨会。会议有利于促进我国相关部门和专家关注病原微生物资源共享机制的法律政策研究,加强领域专家团队建设,跟踪并积极参与国际交流合作,提升我国病原微生物资源共享法律政策研究水平,为推动共享长效https://sccdc.cn/Article/View?id=27366
14.为什么都有API网关?聊聊API网关的作用51CTO博客为什么都有API网关?聊聊API网关的作用 一、API网关的用处 API网关一般会用到以下三种场景上。 Open API 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供,最好的例子就是淘宝开放平台、腾讯公司的QQ开发平台、微信开放平台。https://blog.51cto.com/u_13538361/6383734
15.细辛的药理作用都有什么药学药理学小木虫论坛请问细辛的药理作用有需要补充的吗?我目前查到的就这些 1、解热 细辛挥发油,解热作用部位可能是在https://muchong.com/t-14514946-1
16.酵妈妈酵素桶使用说明大全新酵友一定要看哦酵素的敌人是茶叶、咖啡、饮料、绿茶、白萝卜、热开水,酵素一但遇到这些就会被分解掉,不会起到任何作用,但是也不会有别的影响,只是没有效果,吃对方法,效果好!实在要吃,和以上食物间隔开两个小时以上! 第五,哪些水果不能一起做酵素? 酵友们,下面水果放在一起会相克: https://www.meipian.cn/22w04gbt
17.这是拍了来抹黑我们真“维和防暴队”的吧,拍的什么狗屎(维和防暴这篇影评可能有剧透 就王一博这演技,演啥都一样的演技怎么好意思说王阳偷了他的“白玉兰视帝”他的经纪人是不是偷偷研究了易烊千玺的戏路知道颜值不够就避开能够快速飞升的偶像剧赛道,但是实力也不够啊今天小乔要看的就是《维和防暴队》,幸好前段时间忙没去电影院看要不然真的气死了,拍的什么垃圾李达超导演吴孟璋https://movie.douban.com/review/16000248/