通过几天的学习,熟悉了HarmonyOS 的项目介绍,以及基础的数据结构,方法调用和项目结构.从今天开始要逐步的进入代码环节.
不了解目录结构可以看下目录结构介绍
1:AppScope 应用的全局配置信息 整个项目的全局配置信息
- resoures 全局资源文件
- app.json5 全局配置文件
2. entry 主项目的的目录,软件的启动以及主要代码编写的位置
-
src > main > ets:用于存放ArkTS源码。
-
src > main > ets > entryability:应用/元服务的入口。
-
src > main > ets > pages:应用/元服务包含的页面。
-
src > main > resources: 用于存放应用/元服务模块所用到的资源文件,如图形、多媒体、字符串、布局文件等。关于资源文件的详细说明请参考资源分类与访问。
-
module.json5
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc", // 模块描述,用于显示在系统设置中
"mainElement": "EntryAbility", // 应用入口能力组件
"deviceTypes": [
"tv",
"tablet"
], // 支持的设备类型
"deliveryWithInstall": true, // 是否随应用安装一起交付
"installationFree": false, // 是否免安装运行
"pages": "$profile:main_pages", // 应用主页面配置文件
"virtualMachine": "ark", // 使用Ark虚拟机
"metadata": [
{
"name": "string",
"value": "string",
"resource": "$profile:distributionFilter_config" // 分发过滤配置
}
],
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts", // 入口能力实现代码路径
"description": "$string:EntryAbility_desc", // 能力描述
"icon": "$media:layered_image", // 应用图标
"label": "$string:EntryAbility_label", // 显示名称
"startWindowIcon": "$media:icon", // 启动窗口图标
"startWindowBackground": "$color:start_window_background", // 启动窗口背景色
"exported": true, // 是否对外暴露
"skills": [ // 声明该能力支持的场景
{
"entities": [
"entity.system.home"
],
"actions": [
"ohos.want.action.home"
]
}
]
}
],
"requestPermissions": [
{
"name": "ohos.abilitydemo.permission.PROVIDER", // 请求的权限名称
"reason": "$string:reason", // 权限申请理由
"usedScene": {
"abilities": [
"FormAbility"
],
"when": "inuse" // 使用场景:应用运行时
}
}
]
},
"targetModuleName": "feature", // 目标模块名称
"targetPriority": 50, // 模块加载优先级
"isolationMode": "nonisolationFirst" // 隔离模式配置
}
说明:
- ets 主要代码的目录
- EntryAbility 程序入口(Application)
- module.json5 清单文件(AndroidManifest.xml)
3.EntryAbility 程序入口,用于初始化数据和配置全局展示的一下属性
// EntryAbility 类继承自 UIAbility,用于管理应用的生命周期和窗口阶段
export default class EntryAbility extends UIAbility {
/**
* 当应用能力被创建时调用
* @param want - 描述请求操作和目标的 Want 对象
* @param launchParam - 启动参数,包含启动模式等信息
*/
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 设置应用的颜色模式为未设置,让系统根据自身策略决定颜色模式
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
}
/**
* 当应用能力被销毁时调用
*/
onDestroy(): void {
// 此方法原用于日志记录,现去掉日志打印,可根据需求添加实际销毁逻辑
}
/**
* 当主窗口创建时调用
* @param windowStage - 窗口阶段对象,用于加载内容和管理窗口
*/
onWindowStageCreate(windowStage: window.WindowStage): void {
// pages/Index 加载启动的页面
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
// 若加载内容失败,可根据需求添加错误处理逻辑
return;
}
// 若加载内容成功,可根据需求添加成功后的逻辑
});
}
/**
* 当主窗口销毁时调用
*/
onWindowStageDestroy(): void {
}
/**
* 当应用能力进入前台时调用
*/
onForeground(): void {
}
/**
* 当应用能力进入后台时调用
*/
onBackground(): void {
}
}
4.Index.ets 首次启动的组件页面
@Entry 表示启动入口的装饰器 @Component 表示组件的装饰器
struct 搭配@Component 创建组件
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
this.message = 'Welcome';
})
}
.height('100%')
.width('100%')
}
}
总结
HarmonyOS创建流程 1.创建一个HarmonyOS 的项目 会创建一个entry(默认)的主module 和 AppScope文件夹
- entry 主项目的代码和资源位置
- AppScope文件夹 全局属性配置的文件夹
2: entry/src/main/ets 存放主要代码
3: entry/src/main/resources 存放资源文件
4: entry/src/main/module.json5 清单文件
名字,标题,启动的Ability,启动的index.ets(profile:main_pages),权限都是在这里配置
5: EntryAbility(Application) 程序启动首先启动的位置类似Android的Application 这里启动打开组件
6:Index.ets 主组件 启动的页面在EntryAbility中配置启动
注意:
Index.ets 需要在module.json5 的pages 属性关联的profile:main_pages 中配置类似android Activity