鸿蒙os文件夹,鸿蒙OS应用开发,不体验一波吗?

原标题:鸿蒙OS应用开发,不体验一波吗?

上一篇中,我们已经跑通了鸿蒙 OS 应用开发的环境。这篇,我们就来更深度的探索 hello world 代码背后的东西。

上篇文章传送门:

https: //harmonyos.51cto.com/posts/1898

01

IDE 布局解析

54086980a9c81bd346e3dde6c99913b6.png

如上图,我大体的将整个界面进行了拆分:

最顶部红色区域是菜单栏

左边蓝色区域是项目工程

右边大区是代码编辑区域

右上角是工具条(调试、运行)

底部是显示一些如日志、命令、调试信息

当然这里主要是标出了几个比较大块而且比较固定的窗口,更细节的,比如预览界面等这些属于动态的界面,等有需要的时候再细说。

02

项目工程结构解析

项目工程这里主要存放了项目资源,包含用户代码、配置文件、库文件、图片、音视频等。

d5c1a7da6ceeb857fc4446bcdf67741e.png

根目录就是我们创建项目时自己定义的项目目录,.gradle 和 .idea 一般不需要开发者干预,属于 IDE 自动创建环境的目录。

build 文件夹:此目录为编译产出目录,就是编译后会在这里产生对应 .hap 包(可以理解为类似 ios 的 .ipa,安卓的 .apk)。

entry 文件夹:入口目录,如果是安卓的开发者,可以对应为 app 文件夹。

这里面存放着我们应用程序的核心内容,比如代码、图片、音视频资源等等。

所以这个文件夹是重点,我们再给它展开来剖析:

31ba90a2b2779a1be5fce46ffaf77f3a.png

同样,在 entry 目录下,也有一些眼熟的目录:

①entry-build:跟外层的根项目目录下的 build 作用一致。

②entry-libs:库目录,用于放置库文件的目录。

③entry-src:存放源文件的目录,然后内部又细分 main 目录和 test 目录,main 是核心目录,里面包含核心的程序代码(main-java)和资源(resources)目录。

config.json 是配置信息文件,可以配置诸如包名、版本,设备类型等。其中设备类型(deviceType)指定了当前程序所支持的设备,鸿蒙 OS 会根据实际不同的设备去加载适合当前设备对应版本的 FA。

19a5903d9c38e8ec6397b49d2b572d15.png

④entry-src-resources:这个目录存放着各种资源文件,如应用程序用的图标、音效、布局配置等。

⑤entry-src-tesst :这个是存放测试代码的目录,目前默认使用的是 junit 测试框架。

⑥gradle:这个目录属于编译模块的。

03

代码解析

了解了工程目录后,我们再来解析下之前 hello world 的源码。在 entry-src-main-java-com.xxx.myHarmonyApp 目录下:

9db4fa233aead7946b94ba29099af340.png

我们可以看到有三个 Java 代码文件,其中 slice 可以对应安卓开发中的 fragment 概念。目前官方示例是将逻辑代码放到了 MainAbilitySlice 中。

MainAbility.java:一个 Ability 代表了一种能力,我们可以看到这个 MainAbility 是继承自 Ability 类的。

1137147b8e80a52151aef1fc9fd4e34b.png

这里重写(@Override)了 onStart 方法,方法里做了两件事:

调用了父类的 onStart 方法初始化了 intent。

另一个是调用父类方法设置路由到 slice 类,意思就是它把后续的执行逻辑指定给了 slice。

一般一个 Ability 会对应一个 AbilitySlice。

MyApplication.java:程序的入口,我们看代码里就只重写了一个初始化函数,主要作用是初始化程序。

896329140bdc755519763675b10e9c7b.png

MainAbilitySlice.java:我们看到上面的两个 Java 类中,并没有执行任何的逻辑代码,那么我们的 hello world 字样是怎么输出的呢?

上面说了,MainAbility 已经把它的执行路由给了 slice,所以,核心的逻辑代码就在这个 MainAbilitySlice.java 中了。

2d186582c555da342d5903b461fcddf3.png

代码行数不多,我们可以逐行解析,先解析几个关键字,因本人之前熟悉的技术栈是 c#,这里也做一个简单的对标参照:

package: 是一个关键字,指定了一个包名,格式 com.厂商名.应用名.模块。可以类似的对标 c# 的名称空间。

import: 也是一个关键字,用于导入其他程序包。也可以对标 c# 的 using 关键字。

extends: 关键字,表示继承,对标 c# 的冒号。

@Override: 关键字,表示重写,对标 c# 的 override。

supper: 关键字,表示基类调用,可以对标参照 c# 的 base。

ohos: 表示 open harmony operating system。

intent: 中间件,作用主要为组件相互调用提供媒介,协助组件间的交互与通讯。

所以,有了上面的这些概念,我们再来看代码就比较清晰了:

第 1 行代码, 指定和定义了当前类的一个包名。

3-5 行, 导入了当前所需的包环境。

7-12 行, 继承 AbilictySlice 扩展了 MainAbilitySlice 类。重写了 onStart 方法,调用基类的 onStart 初始化 intent 中间件,再调用基类的 setUIContent 来设置 UI 内容(hello world 的创建在这里)。

14-23 行, 都为周期函数的初始化基类调用。

所以,重点是 super.setUIContent(ResourceTable.Layout_ability_main);这句代码产出了“hello world”,简单说 setUIContent 会解析 ResourceTable 提供的元素信息创建对应的 UI 界面。

ResourceTable 用于管理一些窗口小部件资源,Layout_ability_main 则对应了 entry-src-resources-base-layout 目录下的布局配置。

d68ad4b4c1ec20dbda88199b1ebe498f.png

04

布局文件解析

打开 ability_main.xml 对于 hello world 的来源已经很清晰了:

8b627388ff6d4b6fac1a358d3d945411.png

这是一个 xml 文件,开头对应 <?xml> 标记。

①标签

鸿蒙的方向布局标签,对应的还有 、 等:

xmlns: XML Namespaces: 表示命名空间。

ohos: heigh = “match_parent”: 表示定义了高度适应父级。

ohos: width = “math_parent”: 表示宽度适应父级。

ohos:orientation = “vertical”: 表示布局方向为垂直,另一个相对的值是“horizontal”。

②标签

表示了一个文本元素。

ohos:id = “$+id:tex_helloworld”:表示 text 的调用 id,使用”$+id:”来标示一个占位,后跟一个名称。

这样在需要调用这个 text 的时候就能这样调用:

b40ee5ad74a442386bb4d704e466ce64.png

ohos:backgound_element=“$graphic:background_ability_main”:表示背景元素指定为另一个在 entry-src-main-resources-base-graphic 目录下的 xml 配置。

③标签

表示绘制一个形状。

0805263950b3b2141c70b9cc585ce9d5.png

ohos:shape = “rectangle”:表示绘制一个矩形。

④标签

表示填充颜色。

:表示填充颜色为白色,IDE 的左侧颜色选择块还可以鼠标选择。

回到标签:

ohos:layout_aliment = “horizontal_center”: 表示文字对齐方式为横向居中。

ohos:text = “hello world”: 这个就是最终输出的文本。我们可以改成其他任意字符串试试,比如改成:ohos:text = “你好,鸿蒙!”。

ohos:text_size=“50”: 表示设置字体大小为 50。

同样还可以给文字元素添加颜色:ohos:text_color = “#78FF00”,当输入”#”+任意数字时,IDE 左边就可以看到颜色选择块。

我们可以自定义下配置,可以重新运行看看效果:

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值