当前位置:首页>鸿蒙APP>鸿蒙开发学习笔记(2)

鸿蒙开发学习笔记(2)

  • 2026-08-14 19:24:01
鸿蒙开发学习笔记(2)
第二课内容很多,从周二开始一直到今天,每天学习大约2.5小时,终于顺利通过了考试。
第二章初步介绍了DevEco Studio的使用,DevEco Studio是鸿蒙的开发工具,它提供了:AI辅助编程、编译构建、UI实时预览、代码调试、性能优化和模拟器支持。

DevEco Studio支持使用多种语言进行应用/元服务的开发,包括ArkTS、JS和C/C++。在编写应用/元服务阶段,可以通过掌握代码编写的各种常用技巧,来提升编码效率。

软件安装的基本配置要求

  • 操作系统:Windows10 64位、Windows11 64位
  • 内存:16GB及以上
  • 硬盘:100GB及以上
  • 分辨率:1280*800像素及以上

新建工程(项目):

方法:

欢迎页,选择Create Project开始创建一个新工程。
菜单栏选择File > New > Create Project来创建一个新工程。

注意点:

从API 11版本开始支持Atomic Service元服务工程开发。
Atomic Service元服务工程暂不支持Native开发。
Empty Ability模板:该功能仅支持中国境内(香港特别行政区、澳门特别行政区、中国台湾除外)。

参数解析:

Project name:工程的名称,可以自定义,由大小写字母、数字和下划线组成,必须由大小写字母开头,长度为1~200个字符。

Bundle name:标识应用的包名,用于标识应用的唯一性。

Save location:工程文件本地存储路径,由大小写字母、数字和下划线等组成,不能包含中文字符。

Compatible SDK:兼容的最低API Version。

Module name: 模块的名称。

Device type:该工程模板支持的设备类型。设备类型说明请参考deviceTypes标签。

C++ Standard:C++标准库。从DevEco Studio 6.0.1 Beta1开始,支持选择不同版本,取值包括:Toolchain Default、C++11、C++14。

注意点:

Bundle name(应用包名)要求:必须为以点号(.)分隔的字符串,且至少包含三段,每段中仅允许使用英文字母、数字、下划线(_),如“com.example.myapplication ”。

首段以英文字母开头,非首段以数字或英文字母开头,每一段以数字或者英文字母结尾,如“com.01example.myapplication”。

不允许多个点号(.)连续出现,如“com.example..myapplication ”。

长度为7~128个字符。

创建OpenHarmony工程

在完成创建HarmonyOS工程后,根据如下操作修改工程级build-profile.json5文件中相关字段:

API 26.0.0及之后版本:

在工程级build-profile.json5文件添加compileSdkVersion字段,并赋值为字符串类型。
将runtimeOS从"HarmonyOS"修改为"OpenHarmony"。

API 26.0.0之前版本:

在工程级build-profile.json5文件添加compileSdkVersion字段。
将compatibleSdkVersion、compileSdkVersion、targetSdkVersion(若有)字段赋值为数值类型。
将runtimeOS从"HarmonyOS"修改为"OpenHarmony"。

单击Sync Now进行同步:

在Sync Check弹窗中点击Yes,同意将module.json5/config.json文件中的phone切换为OpenHarmony支持的default类型,并删除在OpenHarmony不适用的其他设备类型,同步成功无其他报错则工程创建完成。

注意:

若选择Native C++模板创建OpenHarmony应用,且应用需要在RK开发板上运行,则需在对应Native模块的build-profile.json5文件buildOption/externalNativeOptions字段下,新增abiFilters字段并赋值为"armeabi-v7a"。

新式UI变化

原有固定于界面上方的菜单栏,在新UI中收起到页面左上角工具栏中Main Menu主菜单图标内。点击图标即可展开菜单,继续选择需要执行的功能或操作。

主窗口两侧的工具窗口提供更丰富的功能选择。与经典UI相比,ArkUI Inspector、Services、Terminal、Problems、Version Control等功能图标在左侧工具窗口中呈现。点击工具窗口中Project图标,显示当前工程目录。

在新UI中,当前编辑的文件所在的工程路径将展示在页面左下方。

布局:

DevEco Studio将窗口分成五个区域:工具栏、工具窗口栏、工具窗口、编辑区和状态栏

工具栏:

窗口顶部,由主菜单、项目小部件、版本控制小部件、构建工具图标和运行小部件组成。(从左至右)

工具窗口栏:

窗口两侧,点击图标显示或者隐藏工具窗口

工具窗口:

悬停窗口两侧或者底部,补充代码编辑功能,常用:项目工具窗口:日志工具窗口、终端工具窗口和CodeGenie工具窗口。

具体如下表:

窗口名称

功能简介

项目工具窗口

查看项目目录结构

日志工具窗口

运行时输出日志信息

终端工具窗口

执行命令行任务

CodeGenie工具窗口

使用AI辅助工具

编辑区:

提供代码编辑功能

状态栏:

窗口底部、分为左右两侧,左侧通常作为导航栏,显示当前打开文件路径、切换文件等;右侧包含指示整个项目和IDE状态小部件:CodeGenie、语言服务、行:列好、行分隔符、文件编码、缩进和只读属性

工程目录结构

包含:应用配置文件、ArkTS源码、资源文件和其他文件

应用配置文件:

全局配置文件app.json5、模块配置文件module.json5

ArkTS源码:

在ets目录下,entryability是应用入口,pages存放应用所包含的页面

资源文件:

在resources目录下,包含应用所需字符串、颜色、图标等资源。

资源可分为系统资源和应用资源。系统资源是系统提供的资源,开发者可以通过主题图标库、系统色彩全量表、字体获取系统图标、颜色、字体等资源信息。其中symbol图标还可通过SymbolGlyph对图标颜色等进一步设置。

其他文件:

主要有:工程级和模块级构建配置文件build-profile.json5、编译构建任务脚本hvigorfile.ts和依赖信息oh-package.json5

资源管理方式

resources目录下包含base、dark和rawfile三部分

base目录:

包含element、media和profile三个子目录

element目录用于存放字符串、颜色、布尔值等基础元素
media目录存放媒体资源,包括:图片、音频、视频
profile目录存放自定义配置文件,只支持json文件

dark目录:

只有当设备采用深色模式时,才会使用dark目录下的资源,管理方式和base目录一致

rawfile目录:

自由放置各类资源文件、比如:文本文件、字体文件和媒体资源。

和base的区别

base目录中的资源文件在编译时会分配资源id,可以通过指定资源类型和资源名称来访问。
rawfile目录中的资源文件会被直接打包进应用,不会分配资源id,需要通过指定文件路径和文件名来访问。

基础元素文件类型

文件名称

元素类型

备注

boolean.json

布尔型

color.json

颜色

float.json

浮点型

范围:-2^128到2^128

intarray.json

整型数组

integer.json

整型

范围:-2^31到2^31-1

plural.json

复数形式

strarray.json

字符串数组

string.json

字符串

单个字符串最大长度为65535字节,超长字符串建议转换为文本文件存放在rawfile目录下

Sample

color.json文件的内容如下:

标准的十六进制颜色值由八位十六进制数字组成,前两位表示透明度,后六位表示颜色值。

{
"color": [
{
"name": "color_hello",
"value": "#ffff0000"
},
{
"name": "color_world",
"value": "#ff0000ff"
}
]
}

float.json文件的内容如下:

{
"float": [
{
"name": "font_hello",
"value": "28.0fp"
},
{
"name": "font_world",
"value": "20.0fp"
}
]
}

string.json文件的内容如下:

{
"string": [
{
"name": "string_hello",
"value": "Hello"
},
{
"name": "string_world",
"value": "World"
},
{
"name": "message_arrive",
"value": "We will arrive at %1$s."
},
{
"name": "message_notification",
"value": "Hello, %1$s!,You have %2$d new messages."
}
]
}

plural.json文件的内容如下:

{
"plural": [
{
"name": "eat_apple",
"value": [
{
"quantity": "one",
"value": "%d apple"
},
{
"quantity": "other",
"value": "%d apples"
}
]
}
]
}

媒体资源文件类型

图片资源类型

格式

文件后缀名

JPEG

.jpg

PNG

.png

GIF

.gif

SVG

.svg

WEBP

.webp

BMP

.bmp

音视频资源类型

格式

支持的文件类型

H.264 AVC

.3gp

Baseline Profile (BP)

.mp4

限定词目录

限定词目录由一个或多个表征应用场景或设备特征的限定词组合而成,限定词包括移动国家码和移动网络码、语言、文字、国家或地区、横竖屏、设备类型、颜色模式和屏幕密度,限定词之间通过下划线(_)或者中划线(-)连接。开发者在创建限定词目录时,需要遵守如下限定词目录命名规则。

限定词的组合顺序:移动国家码_移动网络码-语言_文字_国家或地区-横竖屏-设备类型-颜色模式-屏幕密度。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称。

限定词的连接方式:移动国家码和移动网络码之间采用下划线()连接,语言、文字、国家或地区之间也采用下划线()连接,除此之外的其他限定词之间均采用中划线(-)连接。例如:mcc460_mnc00-zh_Hant_CN、zh_CN-car-ldpi。

限定词的取值范围:每类限定词的取值必须符合限定词取值要求表中的条件。否则,将无法匹配目录中的资源文件。

限定词表

限定词类型

含义与取值说明

移动国家码和移动网络码

移动国家码(MCC)和移动网络码(MNC)的值取自设备注册的网络。

MCC可与MNC合并使用,使用下划线(_)连接,也可以单独使用。例如:mcc460表示中国,mcc460_mnc00表示中国_中国移动。

详细取值范围,请查阅ITU-T E.212(国际电联相关标准)。

语言

表示设备使用的语言类型,由2~3个小写字母组成。例如:zh表示中文,en表示英语,mai表示迈蒂利语。

详细取值范围,请查阅ISO 639(ISO制定的语言编码标准)。

文字

表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。

详细取值范围,请查阅ISO 15924(ISO制定的文字编码标准)。

国家或地区

表示用户所在的国家或地区,由2~3个大写字母或者3个数字组成。例如:CN表示中国,GB表示英国。

详细取值范围,请查阅ISO 3166-1(ISO制定的国家和地区编码标准)。

横竖屏

表示设备的屏幕方向,取值如下:

- vertical:竖屏

- horizontal:横屏

设备类型

表示设备的类型,取值如下:

- phone:手机

- car:车机

- tablet:平板

- tv:智慧屏

- wearable:智能穿戴

- 2in1:PC设备

颜色模式

表示设备的颜色模式,取值如下:

- dark:深色模式

- light:浅色模式

屏幕密度

表示设备的屏幕密度(单位为dpi),取值如下:

- sdpi:表示小规模的屏幕密度(Small-scale Dots Per Inch),适用于dpi取值为(0, 120]的设备。

- mdpi:表示中规模的屏幕密度(Medium-scale Dots Per Inch),适用于dpi取值为(120, 160]的设备。

- ldpi:表示大规模的屏幕密度(Large-scale Dots Per Inch),适用于dpi取值为(160, 240]的设备。

- xldpi:表示特大规模的屏幕密度(Extra Large-scale Dots Per Inch),适用于dpi取值为(240, 320]的设备。

- xxldpi:表示超大规模的屏幕密度(Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(320, 480]的设备。

- xxxldpi:表示超特大规模的屏幕密度(Extra Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(480, 640]的设备。

资源可翻译特性

当应用引用的字符串资源需要支持国际化多语言翻译时,可使用attr属性标记字符串翻译范围和翻译状态。attr属性不参与资源编译,只标记字符串是否翻译。未配置attr属性时,默认需要翻译。

attr支持属性表

名称

类型

说明

translatable

boolean

标记字符串是否需要翻译。

true:需要翻译。

false:不需要翻译。

priority

string

标记字符串翻译状态。

code:未翻译。

translate:翻译未验证。

LT:翻译已验证。

customer:用户定制字符串。

代码阅读相关设置

高亮

打开File > Settings(macOS为DevEco Studio > Preferences/Settings)面板,在Editor > Color Scheme自定义各字段的高亮显示颜色。

跳转

在编辑器中,可以按住Ctrl键(macOS为Command键),鼠标单击代码中引用的类、方法、参数、变量等名称,自动跳转到定义处。

跨语言跳转

选中接口名称单击右键,在弹出的菜单中选择Go To > Implementation(s)(或使用快捷键Ctrl+Alt+B,macOS为Command+Option+B)实现跨语言跳转。

格式化

默认情况下,DevEco Studio已预置了代码格式化的规范,以个性化的设置各个文件的格式化规范,File > Settings > Editor > Code Style(macOS为DevEco Studio > Preferences/Settings > Editor > Code Style)下,选择需要定制的文件类型,如ArkTS,然后自定义格式化规范即可。

在使用代码格式化功能时,可以使用快捷键Ctrl + Alt + L(macOS为Option+Command +L) 快速对选定范围的代码进行格式化。

如果部分代码片段不需要进行自动的格式化处理,可以通过如下方式进行设置:

在File > Settings >Editor > Code Style(macOS为DevEco Studio > Preferences/Settings > Editor > Code Style),单击“Formatter”,勾选“Turn formatter on/off with markers in code comments”。
在不需要进行格式化操作的代码块前增加“//@formatter:off”,并在该代码块的最后增加“//@formatter:on”,即表示对该范围的代码块不需要进行格式化操作。
工程已配置code-linter.json5文件,选中code-linter.json5文件右键选择Apply CodeLinter Style Rules,代码格式化规则将与已配置的code-linter.json5文件中相关规则保持一致。

折叠

单击编辑器左侧边栏的折叠和展开按钮对代码块进行折叠和展开操作,还可以对选中的代码块单击鼠标右键选择折叠方式,包括折叠、递归折叠、全部折叠等操作。

快速注释

使用快捷键Ctrl+/(macOS为Command+/)进行快速注释。对于已注释的代码块,再次使用快捷键Ctrl+/(macOS为Command+/)取消注释。

结构树

使用快捷键Alt + 7 / Ctrl + F12(macOS为Command+7)打开代码结构树,快速查看文件代码的结构树,包括全局变量和函数,类成员变量和方法等,并可以跳转到对应代码行。

引用查找

在要查找的对象上,单击鼠标右键 > Find Usages或使用快捷键Alt +F7(macOS为Option + F7)。

函数注释生成

在函数定义的代码块前,输入“/**”+回车键,快速生成注释信息。

查找

通过对符号、类或文件的即时导航来查找代码。通过连续点击两次Shift快捷键,打开代码查找界面,在搜索框中输入需要查找内容,下方窗口实时展示搜索结果。

快速查阅API接口及组件参考文档

在编辑器中调用ArkTS/JS API或组件时,支持在编辑器中快速、精准调取出对应的参考文档。

可在编辑器中,鼠标悬停在需要查阅的接口或组件,弹窗将显示当前接口/组件在不同API版本下的参数等信息,单击弹窗右下角Show in API Reference;或选中接口或组件,右键点击Show in API Reference(或使用快捷键Alt+A,macOS为Option+A),可以快速查阅更详细的API文档。

Optimize Imports功能

使用编辑器提供的Optimize Imports,可以快速清除未使用的import,并根据设置的规则对import进行合并或排序。选择文件或目录,使用快捷键Ctrl+Alt+O(macOS为Control+Option+O),或单击菜单栏Code > Optimize Imports。

修改优化配置,进入File > Settings(macOS为DevEco Studio > Preferences/Settings) > Editor > Code Style,选择开发语言(当前以ArkTS为例),在Imports标签页中,可选择在优化时是否需合并来自同一模块的import,是否需要对同一条import语句导入的元素进行排序,或对多条import语句按模块排序。

父/子类快速跳转

编辑器支持快速跳转至当前接口、类、方法、属性的子类/父类。点击代码编辑区域左侧的Gutter Icons(装订线图标)可以跳转到对应的父/子接口或类。如有多个继承关系,在弹窗的文件列表中选择需要查看的接口/类即可。

Implemented:支持跳转到对应的实现类或子接口及其对应的属性/方法。
Implementing:支持跳转到对应的父接口或父接口的属性/方法。
Overridden:支持跳转到对应的子类或子类的属性/方法。
Overriding:支持跳转到对应的父类或父类的属性/方法。

功能默认开启,可以通过菜单栏进入File > Settings(macOS为DevEco Studio > Preferences/Settings) > Editor > General > Gutter Icons,通过勾选或取消勾选Implemented、Implementing、Overridden、Overriding四项可以开启或关闭该功能。

查看接口/类的层次结构

编辑器支持查看当前接口/类父类或子类的层次结构。选中或将光标放置于类/接口名称处,使用快捷键Ctrl+H(macOS为Control+H),或在菜单栏Navigate页签下选择Type Hierarchy,在弹出的Hierarchy窗口中查看接口/类的继承关系结构。

Hierarchy窗口按钮功能:

图标

功能

显示所选类的父类和子类。

该功能不支持查看接口的继承关系。

显示当前类/接口的父类。

显示当前类/接口的子类。

按字母顺序对继承关系结构树中的所有同级元素进行排序。

更新所有的类/接口的继承关系结构。

默认双击结构树中类/接口名称时,编辑窗口将跳转至所选类/接口所在的代码位置。勾选该选项后,单击结构树中类/接口名称,即可跳转访问。

展开/折叠继承关系结构。

锁定当前Hierarchy窗口显示于编辑窗口上。

将类/接口的继承关系结构导出到文本文件中。

关闭工具窗口。

查看ArkUI组件状态变量关系

选中或将光标放置于装饰器/变量属性定义处,点击右键选择Show State Variable Binding Relationship,在State Variables弹窗中查看ArkUI组件状态变量绑定关系。

当前支持查看以下状态变量绑定关系:

@Provide和@Consume的绑定关系。
LocalStorage、@LocalStorageProp、@LocalStorageLink三者间或任意两者间的绑定关系。
AppStorage、@StorageProp、@StorageLink三者间或任意两者间的绑定关系。
PersistentStorage、@StorageProp、@StorageLink三者间或任意两者间的绑定关系。
@State、@Prop、@Link三者间或任意两者间的绑定关系。

State Variables窗口按钮功能:

图标

功能

更新所有的状态变量关系。

移动到上一个节点。

移动到下一个节点。

展开/折叠状态变量关系。

嵌入提示

在编辑时启用Inlay Hints嵌入提示功能,可以提供有关参数名称、类型等代码说明信息,提升代码可读性。

进入File > Settings(macOS为DevEco Studio > Preferences/Settings) > Editor > Inlay Hints,配置勾选希望展示的变量名称、属性、参数、返回值类型,点击OK后生效。

Copy Reference

在编辑页面选中代码行或类、方法、参数、变量等名称,右键选择Copy / Paste Special > Copy Reference,将自动复制定义处的地址。复制成功的地址可以在双击Shift弹出的搜索框中进行搜索,帮助开发者快速找到该接口的定义位置。

代码自动补全

提供代码的自动补全能力,编辑器工具会分析上下文,并根据输入的内容,提示可补全的类、方法、字段和关键字的名称等,支持模糊匹配。

自动补全功能默认按最短路径进行排序,如仅需按照最近使用过的类、方法、字段和关键字等名称提供补全内容排序,可以在File > Settings(macOS为DevEco Studio > Preferences/Settings) > Editor > General > Code Completion 中勾选“Sort suggestions by recently used”。

如果已勾选代码补全按最近使用排序但未生效,请检查Code Completion页面,确保“Sort suggestions alphabetically”已取消勾选。

快速覆写父类

DevEco Studio提供Override Methods,辅助开发者根据父类模板快速生成子类方法,提升开发效率。将光标放于子类定义位置,使用快捷键Ctrl+O(macOS为Control+O),或右键单击Generate...,选择Override Methods,指定需要覆写的对象(方法、变量等),点击OK将自动生成该对象的覆写代码。

快速生成构造器

编辑器支持为类快速生成一个对应的构造函数。

在类中使用快捷键Alt+Insert(macOS为Command+N),或单击鼠标右键选择Generate...,在弹窗中选择Constructor,选择一个或多个需要生成构造函数的参数,点击OK。若选择Select None,则生成不带参数的构造器。

快速生成get/set方法

编辑器支持为类成员变量或对象属性快速生成get和set方法。

将光标放置在当前类中,单击右键选择Generate...>Getter and Setter,或者使用快捷键Alt+Insert(macOS为Command+N),在菜单中选择Getter and Setter,完成方法快速生成。

快速生成声明信息到Index文件

编辑器支持将HSP和HAR模块中变量、方法、接口、类等需要对外暴露的信息,通过Generate...>Declarations功能,批量在Index.ets文件中进行声明,便于其他模块调用。

在HSP或HAR模块内的文件编辑界面,单击右键选择Generate...>Declarations,或者使用快捷键Alt+Insert(macOS为Command+N),在菜单中选择Declarations,按住快捷键Ctrl并选择需要声明的变量名、方法名、接口名、类名等,即可在模块的Index.ets文件中批量生成相应的声明信息。

代码快速修复

DevEco Studio支持代码快速修复能力,辅助开发者快速修复ArkTS或C++代码问题。

查看告警信息:使用双击Shift快捷键打开文件查询框,输入problems打开问题工具面板;双击对应告警信息,可以查看告警的具体位置及原因。

快速修复:将光标放在错误告警的位置,可在弹出的悬浮窗中查看问题描述和对应修复方式;单击More actions可查看更多修复方法。或是在页面出现灯泡图标时,可点击图标并根据相应建议,实现代码快速修复。

代码code Linter检查

Code Linter支持对模块内文件或文件夹中的代码进行最佳实践/编程规范方面的检查。

配置代码检查规则

新建工程时,工程根目录下默认创建code-linter.json5配置文件,可对代码检查的范围及对应生效的检查规则进行配置。若使用历史工程进行开发,可在工程中右键选择Code Linter > Generate Config File创建code-linter.json5配置文件。

其中files和ignore配置项共同确定了代码检查范围,ruleSet和rules配置项共同确定了生效的规则范围。具体配置项功能如下:

files:配置待检查的文件名单,如未指定目录,将检查当前被选中的文件或文件夹中所有的.ets文件。

ignore:配置无需检查的文件目录,其指定的目录或文件需使用相对路径格式,相对于code-linter.json5所在工程根目录,例如:build/**/*。

ruleSet:配置检查使用的规则集,规则集支持一次导入多条规则。规则详情请参见Code Linter代码检查规则。目前支持的规则集包括:

通用规则@typescript-eslint
安全规则@security
性能规则@performance
预览规则@previewer
一次开发多端部署规则@cross-device-app-dev
ArkTS代码风格规则@hw-stylistic
正确性规则@correctness
兼容性规则@compatibility

rules:可以基于ruleSet配置的规则集,新增额外规则项,或修改ruleSet中规则默认配置,例如:将规则集中某条规则告警级别由warn改为error。

overrides:针对工程根目录下部分特定目录或文件,可配置定制化检查的规则。

extRuleSet:配置需要检查的自定义规则。

通过DevEco Studio进行代码检查

操作方法

在已打开的代码编辑器窗口右键点击Code Linter,或在工程管理窗口中鼠标选中单个或多个工程文件/目录,右键选择Code Linter > Full Linter执行代码全量检查。

对Git工程中增量文件(包含新增/修改/重命名)进行检查,可在commit界面右下角点击齿轮图标,选择Incremental Linter执行增量检查。

查看和处理代码检查结果

扫描完成后,在底部工具面板查看检查结果。勾选Defects中不同告警等级,可分别查看对应告警级别的信息。点击Filter by scene下拉菜单,可以筛选不同规则的检查结果。双击某条告警结果,可以跳转到对应代码缺陷位置;选中告警结果时,可以在右侧Defect Description窗口查看告警对应的规则详细说明,其中包含正向和反向示例,并根据其中的建议修改代码;搜索规则时,可设定是否全词匹配和大小写敏感。

屏蔽告警信息:

在某些特殊场景下,若扫描结果中出现误报,点击单条告警结果后的Ignore图标,可以忽略对告警所在行的code linter检查;或勾选文件名称或多条待屏蔽的告警,点击左侧工具面板Ignore图标批量执行操作;
在文件顶部添加注释/* eslint-disable */可以屏蔽整个文件执行code linter检查,在eslint-disable 后加入一个或多个以逗号分隔的规则Id,可以屏蔽具体检查规则;
在需要忽略检查的代码块前后分别添加/* eslint-disable/和/eslint-enable/添加注释信息,再执行Code Linter,将不再显示该代码块扫描结果;在待屏蔽的代码行前一行添加/eslint-disable-next-line */,也可屏蔽对该代码行的Code Linter检查。
如需恢复忽略的报错信息,可以直接删除该行上方的注释,重新执行Code Linter检查。

导出检查结果:点击工具面板左侧导出按钮,即可导出检查结果到excel文件,包含告警所在行,告警明细,告警级别等信息。

通过命令行进行代码检查

从DevEco Studio 6.0.1 Beta1开始,支持通过命令行方式进行代码检查。在DevEco Studio安装包\deveco-studio\plugins\codelinter\run目录下打开cmd或者bash窗口,执行如下命令:

node ./index.js [options] [dir]

注意:

若未配置代码检查规则文件,直接执行Code Linter,将按照默认的编程规范规则对.ets文件进行检查。

Code Linter不对如下文件及目录进行检查:

src/ohosTest文件夹
/src/test文件夹
node_modules文件夹
oh_modules文件夹
build文件夹
.preview文件夹
hvigorfile.ts文件
hvigorfile.js文件
BuildProfile.ets文件

界面预览

查看ArkTS/JS预览效果

预览器支持ArkTS/JS应用/元服务“实时预览”和“动态预览”。

实时预览:在开发界面UI代码过程中,如果添加或删除了UI组件,您只需Ctrl+S进行保存,然后预览器就会立即刷新预览结果。如果修改了组件的属性,则预览器会实时(亚秒级)刷新预览结果,达到极速预览的效果(当前版本极速预览仅支持ArkTS组件。支持部分数据绑定场景,如@State装饰的变量)。实时预览默认开启,如果不需要实时预览,请单击预览器右上角按钮,关闭实时预览功能。

动态预览:在预览器界面,可以在预览器中操作应用/元服务的界面交互动作,如单击、跳转、滑动等,与应用/元服务运行在真机设备上的界面交互体验一致。

以ArkTS为例,使用预览器的方法如下:

创建或打开一个ArkTS应用/元服务工程。本示例以打开一个本地ArkTS Demo工程为例。
在工程目录下,打开任意一个.ets文件(JS工程请打开.hml/.css/.js页面)。
可以通过如下任意一种方式打开预览器,启动预览。
通过菜单栏,单击View > Tool Windows > Previewer打开预览器。
在编辑窗口右上角的侧边工具栏,单击Previewer,打开预览器。

ArkUI预览支持页面预览、组件预览、多断点预览和卡片预览。

页面预览

ArkTS应用/元服务支持页面预览。页面预览通过在工程的ets文件头部添加@Entry实现。

组件预览

ArkTS应用/元服务支持组件预览。组件预览支持实时预览,不支持动态图和动态预览。组件预览通过在组件前添加注解@Preview实现,在单个源文件中,最多可以使用10个@Preview装饰自定义组件。

多断点预览

ArkTS应用/元服务支持多断点预览,可以同时展示8个典型档位断点的预览画面。在多断点预览模式下,不支持实时预览和极速预览;如果图片太大或图片太多,预览时可能无法显示。多断点预览通过在工程的ets文件头部添加@Entry实现。

每个断点预览画面上均可点击查看该断点档位下的组件树。

支持代码编辑器、UI界面和组件树三者之间的联动:

选中预览器UI界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示。
选中布局文件中的代码块,则在UI界面会高亮显示,组件树上的组件节点也会呈现被选中的状态。
选中组件树中的组件,则对应的代码块和UI界面也会高亮显示。
不支持修改属性面板上的组件属性。

卡片预览

创建卡片并选中卡片文件后,点击右侧边栏Previewer按钮即可预览卡片。

Profile Manager

由于真机设备型号众多,不同设备型号的屏幕分辨率可能各不相同。因此,在HarmonyOS应用/元服务开发过程中,为了适配多种设备型号,可能需要查看不同设备上的界面显示效果。

DevEco Studio的预览器提供了Profile Manager功能,支持开发者自定义预览设备Profile(包含分辨率和语言),从而可以通过定义不同的预览设备Profile,查看HarmonyOS应用/元服务在不同设备上的预览显示效果。当前支持自定义设备分辨率及系统语言。

定义设备后,可以在Previewer右上角,单击按钮,打开Profile管理器,切换预览设备。

操作步骤:

在预览器界面,打开Profile Manager界面。
在Profile Manager界面,单击+ New Profile按钮,添加设备。
在Create Profile界面,填写新增设备的信息,如Profile ID(设备型号)、Device type(设备类型)、Resolution(分辨率)和Language and region(语言和区域)等。其中Device type只能选择module.json5中deviceTypes字段已定义的设备。
设备信息填写完成后,单击OK完成创建。

查看多端设备预览效果

DevEco Studio支持HarmonyOS分布式应用/元服务开发,同一个应用/元服务可以运行在多个设备上。在HarmonyOS分布式应用/元服务的开发阶段,因不同设备的屏幕分辨率、形状、大小等不同,开发者需要在不同的设备上查看应用/元服务的UI布局和交互效果,此时便可以使用多端设备预览器功能,方便开发者在应用/元服务开发过程中,随时查看不同设备上的界面显示效果。

多端设备预览最多同时支持4个设备的预览。

操作:

在工程目录中,打开任意一个ets文件(JS请打开hml/css/js文件)。
可以通过如下任意一种方式打开预览器开关,显示效果如下图所示:
通过菜单栏,单击View > Tool Windows > Previewer,打开预览器。
在编辑窗口右上角的侧边工具栏,单击Previewer,打开预览器。
在Previewer窗口中,打开Profile Manager中的Multi-profile preview开关,同时查看多设备上的应用/元服务运行效果。

Inspector双向预览

DevEco Studio提供HarmonyOS应用/元服务的UI预览界面与源代码文件间的双向预览功能,支持ets文件与预览器界面的双向预览。

不支持服务卡片的双向预览功能。

开启双向预览功能后,支持代码编辑器、UI界面和组件树三者之间的联动:

选中预览器UI界面中的组件,则组件树上对应的组件将被选中,同时代码编辑器中的布局文件中对应的代码块高亮显示。
选中布局文件中的代码块,则在UI界面会高亮显示,组件树上的组件节点也会呈现被选中的状态。
选中组件树中的组件,则对应的代码块和UI界面也会高亮显示。

注意:

如果组件有做数据绑定,则其属性不支持在属性面板修改。
如果界面有使用动画效果或者带动画效果组件,则其属性不支持在属性面板修改。
多设备预览时,不支持双向预览。

预览数据模拟

使用Hamock在预览场景模拟,需要在工程或模块的oh-package.json5中添加该依赖,然后重新同步工程。

"devDependencies": {
"@ohos/hamock": "1.0.0"
}

Hamock提供了@MockSetup用于修饰Mock方法,仅支持声明式范式的组件。当开发者预览该组件时,预览运行时将在组件初始化时执行被@MockSetup修饰的方法。因此,开发者可以在这个被修饰的方法内重定义组件的方法或重赋值组件的属性,其将在预览时生效。

@MockSetup修饰的方法仅在预览场景会自动触发,并先于组件的aboutToAppear执行。

UI组件的方法

在ArkTS页面代码中引入Hamock。

import { MockKit, when, MockSetup } from '@ohos/hamock';

在目标组件中定义一个方法,并用@MockSetup修饰该方法。在这个方法中,使用MockKit模拟目标方法。

import { MockKit, when, MockSetup } from '@ohos/hamock';
@Entry
@Component
struct Index {
...
@MockSetup
randomName() {
let mocker: MockKit = new MockKit();
let mockfunc: Object = mocker.mockFunc(this, this.method1);
// mock 指定的方法在指定入参的返回值
when(mockfunc)('test').afterReturn(1);
}
...
// 业务场景调用方法
const result = this.method1('test'); // in previewer, result = 1
}

UI组件的属性

在ArkTS页面代码中引入Hamock。

import { MockSetup } from '@ohos/hamock';

在目标组件中定义一个方法,并用@MockSetup修饰该方法。在这个方法中,对于需要Mock的属性,可以重新赋值。

import { MockSetup } from '@ohos/hamock';
@Component
struct Person {
@Prop species: string;
// 在@MockSetup片段中,定义对象属性
@MockSetup
randomName() {
this.species = 'primates'
}
...
// 业务场景调用属性(如果从初始化到调用期间,该属性无变化)
const result = this.species // in previewer, result = primates
}

模块的Mock

模块的Mock支持对系统模块、依赖模块及本地模块的Mock,通过新建ArkTS文件定义Mock实现代码,并在mock-config.json5配置文件中定义目标模块与Mock实现代码文件的映射关系。目标模块与Mock实现代码文件为一对一的关系,即对于同一目标模块,仅支持一份Mock实现代码,预览运行时,所有页面import目标模块都将指向这一份Mock实现代码。

系统模块/依赖的模块

在src/mock目录下新建一个ArkTS文件,在这个文件内定义目标模块的Mock实现。

// src/mock/MeasureText.mock.ets
import MeasureText from '@ohos.measure'
// 类的mock使用继承(extends)的方式实现
class MockMeasureText extends MeasureText {
// 定义mock实现
static measureText(): number {
console.log('Return value of the mock measureText function')
return 100;
}
};
export default MockMeasureText;

在Mock配置文件src/mock/mock-config.json5中定义目标模块与Mock实现的替换关系。该替换关系会在预览场景下生效。

{
"@ohos.measure": { // 待替换的moduleName
"source": "src/mock/MeasureText.mock.ets" // Mock代码的路径,相对于模块根目录
},
...
}

在原调用处中添加Hilog日志,方便在预览时,在Log中打印获取返回值,从而验证Mock是否生效。

hilog.debug(DomainNumber, logTag, 'Mock %{public}s', `${MeasureText.measureText({textContent: 'Hello World'})}`)

本地模块

在src/mock目录下新建一个ArkTS文件,在这个文件内定义目标模块的Mock实现。

// src/mock/module/utils/CommonUtils.mock.ets
// 导入本地模块
import LibDefaultExport from '../../../main/ets/utils/CommonUtils'; // get origin default export
import { methodA, ObjectB } from '../../../main/ets/utils/CommonUtils'; // get origin export on demand
class DefaultExportMock extends LibDefaultExport {
// 定义mock实现
public static getName(): String {
return "Mocked Name";
}
};
// Mock methodA方法
export const methodAMock = (): string => {
return "methodA Mocked"
}
export {
methodAMock as methodA,
ObjectB,
}
export default DefaultExportMock;

其中CommonUtils.ets文件示例如下:

export default class CommonUtils {
public static getName(): String {
return "origin name";
}
public static getTitle(): String {
return "origin title";
}
}
export const methodA = (): string => {
return "methodA"
}
export const ObjectB: Object = new Object();

在Mock配置文件src/mock/mock-config.json5中定义目标模块与Mock实现的替换关系。该替换关系会在预览场景下生效。

{
"utils/CommonUtils.ets": { // 本地模块只支持ets/xxx的相对路径,并需明确文件后缀
"source": "src/mock/module/utils/CommonUtils.mock.ets"
},
...
}

在原调用处中添加Hilog日志,方便在预览时,在Log中打印获取返回值,从而验证Mock是否生效。

hilog.debug(DomainNumber, logTag, 'Mock %{public}s', CommonUtils.getName());

支持使用预览器的API清单

组件

ArkTS组件

组件

API

基础组件

AlphabetIndexer

Blank

Button

Checkbox

CheckboxGroup

DataPanel

DatePicker

Divider

Gauge

Image

ImageAnimator

ImageSpan

LoadingProgress

Marquee

Menu

MenuItem

MenuItemGroup

Navigation

NavRouter

NavDestination

PatternLock

Progress

QRCode

Radio

Rating

ScrollBar

Search

Select

Slider

Span

Stepper

StepperItem

Text

TextArea

TextClock

TextInput

TextPicker

TextTimer

Toggle

容器组件

Badge

Column

ColumnSplit

Counter

Flex

FlowItem

GridCol

GridRow

List

ListItem

ListItemGroup

Navigator

Panel

Refresh

RelativeContainer

Row

RowSplit

Scroll

SideBarContainer

Stack

Swiper

Tabs

TabContent

WaterFlow

绘制组件

Circle

Ellipse

Line

Polyline

Path

Rect

Shape

画布组件

Canvas

CanvasGradient

CanvasPattern

CanvasRenderingContext2D

ImageBitmap

ImageData

Matrix2D

OffscreenCanvasRenderingContext2D

Path2D

JS组件

组件

API

基础组件

button

chart

divider

image

image-animator

input

label

marquee

menu

option

picker

picker-view

piece

progress

qrcode

rating

search

select

slider

span

switch

text

textarea

toolbar

toolbar-item

toggle

容器组件

badge

dialog

div

form

list

list-item

list-item-group

panel

popup

refresh

stack

stepper

stepper-item

swiper

tabs

tab-bar

tab-content

画布组件

canvas

CanvasRenderingContext2D

Image

CanvasGradient

ImageData

Path2D

ImageBitmap

OffscreenCanvas

OffscreenCanvasRenderingContext2D

栅格组件

grid-container

grid-row

grid-col

svg组件

svg

rect

circle

ellipse

path

line

polyline

polygon

text

tspan

textPath

animate

animateMotion

animateTransform

接口

UI界面

模块

API

@ohos.animator (动画)

Animator

AnimatorResult

AnimatorOptions

@ohos.mediaquery (媒体查询)

matchMediaSync

MediaQueryResult

MediaQueryListener

@ohos.promptAction (弹窗)

showToast

showDialog

showActionMenu

ShowToastOptions

Button

ShowDialogSuccessResponse

ShowDialogOptions

ActionMenuSuccessResponse

ActionMenuOptions

@ohos.router (页面路由)

pushUrl

replaceUrl

back

clear

getLength

getState

enableAlertBeforeBackPage

disableAlertBeforeBackPage

getParams

RouterMode

RouterOptions

RouterState

EnableAlertOptions

网络管理

模块

API

@ohos.net.http (数据请求)

http.createHttp

如果Http请求需要配置代理才能访问,API 12及以上的预览器支持使用系统的http_proxy/https_proxy/no_proxy环境变量。

数据管理

模块

API

@ohos.data.preferences (用户首选项)

data_preferences.getPreferences

data_preferences.deletePreferences

data_preferences.removePreferencesFromCache

Preferences

ValueType

文件管理

支持在预览/预览调试Stage模型的HAP/HSP时,使用文件管理的相关API,并且需要先打开Enable file operation开关。

模块

API

@ohos.file.fs (文件管理)

fs.open

fs.close

fs.fdatasync

fs.fsync

fs.read

fs.write

fs.mkdir

fs.mkdtemp

fs.rename

fs.rmdir

fs.unlink

fs.stat

fs.truncate

模拟器与真机调试

模拟器在本地计算机上创建和运行,能够在运行和调试应用/元服务时保持良好的流畅性和稳定性,但会占用一定的计算机资源,请确保预留充足的系统CPU和内存资源,具体的运行环境要求如下。

运行环境

类别

最低要求

推荐

操作系统

Windows 10企业版、专业版或教育版及以上,且操作系统版本不低于10.0.18363

最新的64位Windows

CPU

  • 具有二级地址转换 (SLAT) 的64位处理器
  • CPU支持AES指令集
  • CPU支持VM监视器模式扩展(Intel CPU的VT-c技术)
  • 不支持在虚拟机系统中运行模拟器
  • 不支持采用ARM CPU的Windows计算机
  • 2017年以后CPU型号。
  • 最新的Intel Core i5、i7、i9系列CPU
  • 最新的AMD Ryzen 5、6、7、9系列CPU
  • CPU后缀为H/HK/HX的笔记本电脑或后缀为S/F/K的台式机

由于性能不足,不推荐使用 Intel® Core N 系列和 U 系列处理器

RAM

16GB

32GB及以上

磁盘空间

16GB

32GB及以上

屏幕

屏幕分辨率1280*800像素以上

屏幕分辨率1920*1080像素以上

GPU

  • 支持OpenGL版本4.1
  • 支持2017年以后的集成显卡,或具有4GB或以上显存的独立显卡
  • 从DevEco Studio 6.0.0 Release版本开始,AMD的GPU显示驱动要求不低于24.1.1版本
  • 支持OpenGL版本4.1及以上
  • 最新的集成显卡
  • 最新的具有8GB或以上显存的独立显卡,并配套最新驱动程序

模拟器与真机差异

性能差异

模拟器是运行在Mac或Windows电脑上的虚拟机应用,会使用电脑的硬件资源,包括CPU、内存和网络连接等。这些资源在容量和速度上可能与真机存在显著差异。因此,模拟器不适合用于测试应用/元服务的性能(如数据处理、图形渲染、网络速度)、资源占用(如内存、CPU、功耗),模拟器的性能测试结果仅能用于评估应用功能的相对差异。如需获取真实场景下的用户体验数据,建议在真机上进行测试。

显示效果差异

模拟器使用电脑的显示器,与真机屏幕不同,可能会导致文本和图像在模拟器上出现边缘锯齿。放大模拟器窗口比例可以使文字和图像更清晰。
电脑屏幕的色域范围可能与移动设备不同,从而导致颜色显示不准确。
模拟器不支持屏幕亮度调节。

图形接口差异

模拟器不支持OpenGL ES 3.1、3.2接口。
DevEco Studio 6.1.0 Beta2之前的版本,不支持Vulkan接口,从DevEco Studio 6.1.0 Beta2版本开始,支持除vkGetSwapchainGrallocUsageOHOS、vkAcquireImageOHOS、vkQueueSignalReleaseImageOHOS之外的接口。

多媒体差异

模拟器不支持heif格式的图片。

视频播放:模拟器仅支持h264文件格式,并且是RGBA像素格式的视频文件。

模拟器不支持视频录制/转码/处理、屏幕录像。

Kit能力差异

当前部分Kit在模拟器上使用时,和真机存在差异。

其他差异

模拟器和真机的其他重要差异

影响场景

SIM卡

不支持拨打电话、发送短信

USB

不支持连接、数据传输

蓝牙

不支持蓝牙设备扫描、连接、数据传输

星闪

不支持星闪设备扫描、连接、数据传输、分布式能力

NFC

不支持NFC卡片读写、刷卡

TEE(Trusted Execution Environment,可信执行环境)

不支持安全GPS、设备证书等,部分安全相关Kit暂不支持,详情参考安全Kit简介

NPU

部分AI相关Kit暂不支持,详情参考AI Kit简介

生物识别

不支持指纹、人脸认证等

摄像头/麦克风

依赖电脑设备,不支持多摄像头切换(广角/长焦)、闪光灯、降噪算法等

电源

模拟电源,不支持温控、快充等场景

模拟器

默认模拟器

DevEco Studio会预置模拟器,开发者无需创建即可快速使用。

新建模拟器

点击菜单栏的Tools > Device Manager,点击右下角的Edit设置模拟器实例的存储路径Local Emulator Location。
在Local Emulator页签中,单击右下角的New Emulator按钮,创建一个模拟器。在模拟器配置界面,可以选择一个默认的设备模板。单击Edit可以设置镜像文件的存储路径。
单击Next,设置设备相关的参数。
👋

Name:设置模拟器的名称。

Screen Profile:从DevEco Studio 6.0.0 Beta1版本开始,部分设备支持选择预置的机型配置或自定义屏幕配置,具体支持的设备请参考自定义屏幕配置。可点击下拉框选择预置的机型配置,也可点击Customize自定义配置,在自定义配置的情况下可以对屏幕尺寸、分辨率和DPI进行修改,取值范围参考界面提示。

如果是Car设备,还支持新增或删除屏幕,关于多屏能力的介绍请参考Car设备多屏能力。

Screen size:屏幕的对角线长度,单位为inch。

Resolution:分辨率,包括宽度和高度,单位为px。

DPI:像素密度,DPI 越高,UI组件占用的像素点越多,从而提供更精细的显示效果。

Boot options:模拟器启动方式。从DevEco Studio 6.1.0 Beta1版本开始支持。

Cold boot:冷启动,以开机启动的方式重新启动。

Quick boot:热启动,启动时加载上次关闭时保存的快照,启动后会恢复至上次关闭时的状态。

Memory:设置模拟器的内存。

Storage:设置模拟器的存储空间。

确认所有参数后,点击Finish创建模拟器。

启动模拟器

👋

创建后的模拟器会展示在设备列表中(最多10个),选择模拟器后,点击运行按钮,即可一键完成启动模拟器、编译构建、推包运行操作。

在设备管理器页面,单击启动模拟器。

单击DevEco Studio的Run > Run'模块名称'。
DevEco Studio会启动应用/元服务的编译构建与推包,完成后应用/元服务即可运行在模拟器上。

启动和关闭模拟器

在设备管理器页面,单击即可启动模拟器。模拟器启动时会默认携带之前运行时的用户数据,包括用户上传的文件,安装的应用等。

如果是新创建的模拟器,则不会携带用户数据。
如果想清除之前运行时的用户数据,点击Actions >  > Wipe User Data。
如果创建模拟器时选择热启动,则启动模拟器时会加载上次关闭时保存的快照,启动后会恢复至上次关闭时的状态。热启动后,多屏状态会恢复为单屏状态,折叠屏模拟器会恢复成默认展开状态。
如果热启动后出现异常,可点击Actions >  > Wipe User Data清除用户数据后重新启动。

在模拟器运行期间,可以点击Actions >  > Show on Disk显示模拟器在本地生成的用户数据。点击Actions >  > Generate logs可以生成模拟器自启动到此刻的所有日志信息。想要关闭运行中的模拟器,可以在设备管理器页面点击,或者点击模拟器工具栏上的关闭按钮。

模拟器关闭后,点击Actions >  > Delete可以删除模拟器,并清除模拟器的用户数据和配置信息。

操控屏幕

常用操作

描述

滑动屏幕

将鼠标放置屏幕上方,按住鼠标左键,在屏幕上轻扫,然后释放。

拖动项目

将鼠标放置屏幕中的项目上方, 按住鼠标左键,移动项目,然后释放。

单击屏幕

将鼠标放置屏幕上方,按住鼠标左键,然后释放。

双击屏幕

将鼠标放置屏幕上方,快速双击鼠标左键,然后释放。

长按屏幕

指向屏幕上的一个项目,按下鼠标左键,保持一段时间,然后释放。

输入文字

鼠标点击输入域,随后您可以使用计算机键盘或屏幕上弹出的软键盘在模拟器中键入文字。

双指缩放

Windows系统按下Ctrl键(macOS上为Command)会弹出一个捏合手势多点触控界面。单击鼠标左键模拟按住双指,并释放鼠标左键模拟松开双指。鼠标充当第一个手指,穿过锚点是第二个手指。拖动光标以移动第一个点。

垂直滑动

在屏幕上打开一个垂直菜单,使用鼠标滚轮滚动菜单项。单击菜单项可进行选择。

复制粘贴

在计算机上复制一段文本后,您可以在模拟器屏幕的文本输入框内进行粘贴。可支持复制的最大文本长度为30000英文字符,超过该长度会对文本进行截断。

从DevEco Studio 6.0.1 Beta1版本开始,支持在计算机和模拟器之间互相复制粘贴。

模拟器工具栏

按键

功能描述

关闭

关闭模拟器。

最小化

最小化模拟器窗口。

更多

打开侧边扩展菜单。

电源

模拟电源,可模拟亮灭屏操作,从DevEco Studio 6.1.0 Beta1版本开始支持。

置顶

将模拟器置于所有打开窗口的顶层。

左旋转

将设备屏幕逆时针旋转90度。

右旋转

将设备屏幕顺时针旋转90度。

增大音量

调高设备音量,长按可持续调高设备音量。

减小音量

调低设备音量,长按可持续调低设备音量。

截屏

生成当前屏幕的截图,并将图片保存在本地计算机。

返回

返回上一屏幕或关闭对话框、选项菜单、通知面板或屏幕键盘。

主屏

返回Home界面。

最近

点按可打开最近使用过的应用的缩略图列表。要打开某个应用,请点按其缩略图。要从列表中删除缩略图,请向上滑动缩略图。

摇一摇

触发设备摇一摇操作,详情参考摇一摇

多屏

打开多屏面板,可以动态增删屏幕,详情参考多屏

电池

打开电池模拟面板,详情参考电池

GPS

打开GPS模拟面板,详情参考GPS定位

虚拟传感器

打开虚拟传感器面板,详情参考虚拟传感器

网络

打开网络面板,详情参考网络

设置

打开设置面板。可设置模拟器主题、截屏保存路径、模拟器使用语言。

Bug报告

打开Bug报告面板。点击保存并发送按钮可以将Bug日志传递给我们。

关于

打开关于面板。可以查看模拟器相关信息及许可证。

展开

仅支持可折叠设备。切换设备形态至展开态。

悬停

仅支持可折叠设备。切换设备形态至悬停态,并显示折痕避让区。

折叠

仅支持可折叠设备。切换设备形态至折叠态。

三屏

仅支持三折叠设备。切换设备形态至左展开,右展开状态。对应FOLD_STATUS_EXPANDED_WITH_SECOND_EXPANDED状态。

双屏

仅支持三折叠设备。切换设备形态至左折叠,右展开状态。对应FOLD_STATUS_EXPANDED状态。

单屏

仅支持三折叠设备。切换设备形态至左折叠,右折叠状态。对应FOLD_STATUS_FOLDED状态。

左半折,右展开

仅支持三折叠设备。切换设备形态至左半折,右展开状态,并显示折痕避让区。对应FOLD_STATUS_EXPANDED_WITH_SECOND_HALF_FOLDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

左展开,右半折

仅支持三折叠设备。切换设备形态至左展开,右半折状态,并显示折痕避让区。对应FOLD_STATUS_HALF_FOLDED_WITH_SECOND_EXPANDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

左半折,右半折

仅支持三折叠设备。切换设备形态至左半折,右半折状态,并显示折痕避让区。对应FOLD_STATUS_HALF_FOLDED_WITH_SECOND_HALF_FOLDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

左折叠,右半折

仅支持三折叠设备。切换设备形态至左折叠,右半折状态,并显示折痕避让区。对应FOLD_STATUS_HALF_FOLDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

左半折,右折叠

仅支持三折叠设备。切换设备形态至左半折,右折叠状态。对应FOLD_STATUS_FOLDED_WITH_SECOND_HALF_FOLDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

左展开,右折叠

仅支持三折叠设备。切换设备形态至左展开,右折叠状态。对应FOLD_STATUS_FOLDED_WITH_SECOND_EXPANDED状态。

从DevEco Studio 6.1.0 Beta2版本开始支持。

横展

仅支持折叠2in1设备。切换设备形态至横展状态。

竖展

仅支持折叠2in1设备。切换设备形态至竖展状态。

悬停

仅支持折叠2in1设备。切换设备形态至悬停状态。

磁吸

仅支持折叠2in1设备。切换设备形态至磁吸状态。

移动和缩放模拟器

移动模拟器

可以使用鼠标拖动模拟器到屏幕的指定位置。首先将鼠标放在屏幕边缘,当鼠标变成

样式,按住鼠标左键并移动即可拖动模拟器。当模拟器被拖动到期望位置后,松开鼠标左键即可停止拖动。

缩放模拟器

如需改变模拟器大小,将鼠标放到屏幕四角的任意一处,当鼠标变成

,按住鼠标左键并移动即可缩放模拟器。当模拟器被缩放到期望大小后,松开鼠标左键即可完成缩放。

安装应用程序包和上传文件

安装应用程序包

可以将本地的HAP包安装到模拟器上,只需要将本地的HAP包拖动到屏幕上即可进行安装,支持一次性拖拽安装多个HAP包。模拟器也支持安装包含HSP文件的应用,只需要将HSP和HAP一起拖动到屏幕上即可进行安装。

也可以在命令行窗口进入DevEco Studio安装目录的sdk\default\openharmony\toolchains目录下,使用hdc app install命令安装包。安装完成后,可在应用列表里查看已安装的应用。

上传文件

可以将本地文件上传到模拟器中,只需要将文件拖动至模拟器屏幕上即可。模拟器支持批量上传文件,上传的文件存放在虚拟设备的/storage/media/100/local/files/Docs/Download/目录下。可以在模拟器上打开文件管理 > 我的手机 > 下载查看上传的文件。

此外,也可以在命令行窗口进入DevEco Studio安装目录的sdk\default\openharmony\toolchains目录下,使用hdc file send命令上传文件。

从DevEco Studio 6.1.0 Beta2版本开始,使用API 21及以上的镜像时,上传的图片类文件将保存在图库中。

扩展能力

模拟器支持电池、GPS、虚拟传感器等扩展能力,具体使用方式参考以下介绍。点击模拟器菜单栏的

,打开扩展菜单栏。

电池

可以在模拟器上模拟不同电池状态。在扩展菜单栏上点击

打开电池模拟界面。在该界面,您可以手动输入或拖动滑块来改变电量百分比,也可以点击

切换电池的充电/放电状态。电池具有以下三种充电状态:

ENABLE:开启充电按钮,此时正在充电且电量没充满。
NONE:关闭充电按钮,此时停止充电。
FULL:开启充电按钮,且电量为100%,电量已充满。

在应用中,您可以通过模块查询模拟器的剩余电量以及充电状态。

GPS定位

模拟器可以模拟设备所处的位置。您可以打开扩展菜单,并点击

进行位置信息的设置。模拟器提供以下方式的GPS位置模拟:

手动设置:在该界面,您可以手动输入此时所处位置的经度,纬度,海拔以及方位角。您也可以通过点击城市下拉框,快速定位到所选城市。

导入:在导入界面您可以注入一段时间内的连续位置信息。点击

导入本地的GPX文件,点击

即可开始模拟GPX文件中的轨迹。此外,您还可以选择不同回放速率来改变移动的速度。

场景模拟:如果没有本地的GPX文件,您可以在场景模拟界面使用我们预置的GPX文件。我们在模拟器内部预置了户外跑步、户外骑行、驾驶导航三种场景的GPX文件,点击

即可开始轨迹模拟。

在应用中,您可以通过模块获取模拟器的位置信息。

虚拟传感器

模拟器提供了虚拟传感器来模拟硬件传感器的能力。在扩展菜单上点击打开虚拟传感器界面。在该界面,您可以调节不同的传感器来测试您的应用,使用@ohos.sensor模块监听传感器值的变化。模拟器提供以下虚拟传感器:

计步传感器:用于测量步数,对应的SensorId为PEDOMETER。

环境光传感器:用于测量光照强度,对应的SensorId为AMBIENT_LIGHT。

心率传感器:用于测量心率,对应的SensorId为HEART_RATE。从DevEco Studio 6.1.0 Beta1版本开始,Wearable设备支持心率传感器。

您可以拖动滑动条或者直接在文本框输入来改变不同传感器的值。

网络

模拟器的网络功能支持配置代理服务器和DNS地址,打开扩展菜单栏,并点击

打开网络界面。

代理设置

模拟器可以将网络请求代理到代理服务器,利用代理服务器去请求目标服务器。从而满足以下开发场景:

开发者处于内网环境,希望通过设置代理的方式访问外网;
开发者已经在DevEco Studio上配置了网络代理,不希望在模拟器上重复配置代理;
开发者需要将网络请求代理到三方抓包工具,方便查看请求信息。

模拟器提供以下三种代理模式:

使用DevEco Studio代理
无代理
手工配置代

配置代理后,可以点击Check Connection对当前的代理配置进行校验,并点击Apply按钮进行保存。

DNS设置

新增DNS设置功能,开发者可以手动设置DNS服务器用于域名解析,设置后点击Apply提交。

摇一摇

模拟器可以模拟用户对设备的摇一摇操作。点击工具栏上的

,您可以模拟时长为1s的摇一摇操作。您的应用可以通过模块监听加速度传感器变化,当加速度传感器的变化量达到设定阈值时,触发摇一摇对应的业务逻辑。

音频输入

模拟器当前仅支持Audio Kit(音频服务)提供的音频输入能力,您可以使用本地计算机上的麦克风设备向模拟器中传输音频数据。使用步骤如下:

首先,请确保本地计算机已连接上麦克风设备。
应用调用Audio Kit提供的API接口(如AudioCapturer、OHAudio)开始接收音频数据。
使用本地麦克风进行语音输入。

模拟器上的应用在调用相关API时,推荐使用如下格式的音频流信息格式,以保证清晰流畅的音质。

音频流信息

推荐值

samplingRate(采样率)

48000Hz

channels(通道数)

2

sampleFormat(采样格式)

带符号的16位整数

encodingType(编码格式)

PCM编码

摄像头

模拟器支持调用本地计算机摄像头。

模拟器调用摄像头的开发步骤如下:

请确保本地计算机上存在可用的摄像头,不支持通过USB连接的摄像头。
应用调用对应Kit提供的API接口,通过电脑摄像头实现预览、拍照、扫码等功能。

表冠

穿戴模拟器可以模拟表冠功能。

鼠标单击表冠:根据当前所在页面,单击后跳转到表盘或桌面。

鼠标双击表冠:进入多任务管理界面。

在屏幕上使用鼠标滚轮:模拟表冠旋转。

设置

模拟器支持设置主题、语言和截屏保存路径。打开扩展菜单栏,并点击打开设置面板。、

主题:支持Light和Dark两种主题。

语言:

界面语言:设置模拟器工具栏的语言。从DevEco Studio 6.1.0 Beta2版本开始,设置界面语言后,对所有模拟器都生效。

OS语言:从DevEco Studio 6.1.0 Beta2版本开始,支持设置模拟器镜像中的语言。此处的OS语言设置和模拟器的设置 > 系统中的语言设置效果相同。

首次启动模拟器时,会根据当前计算机的系统语言,对模拟器的界面语言和OS语言进行初始化。如果计算机的系统语言不在模拟器的支持范围内,则模拟器语言默认使用英文。

如需重置OS语言,可通过Wipe User Data进行清除重置。界面语言不支持重置,只能再次修改。

截屏保存路径:设置模拟器工具栏的截屏功能对应的图片保存路径。

多屏

模拟器支持使用多屏能力,基于同一个镜像创建不同分辨率、DPI的多屏幕模拟器,满足开发者快速测试不同分辨率、DPI场景下的UI布局等需求。

使用约束

模拟器旋转功能和多屏功能互斥,不能同时使用。

多屏状态下扩展屏不支持使用画中画功能、不支持鼠标滚轮操作。

Phone类型的模拟器支持多屏能力。

Tablet类型的模拟器支持多屏能力。

Car类型的模拟器支持多屏能力。

添加屏幕

启动模拟器,点击工具栏的多屏按钮

,打开多屏界面。

点击添加,可以选择Mate系列、Pura系列、Nova系列等产品型号,点击应用即可添加对应的屏幕。

默认情况下,所有的屏幕是整体拖动和缩放的,如需单独拖动和缩放单个屏幕,请勾选界面上的每个副屏在独立窗口中显示,并点击应用按钮。

如需在多个屏幕上同时启动应用,请按界面提示,将module.json5中的launchType字段配置为multiton。

修改屏幕参数

如需自定义屏幕分辨率、DPI或尺寸,可以在多屏界面上直接修改屏幕参数,取值范围参考界面提示,修改后点击应用。

Width:宽度,单位为px。
Height:高度,单位为px。
DPI:像素密度,DPI 越高,UI组件占用的像素点越多,从而提供更精细的显示效果。
Size:屏幕的对角线长度,单位为inch。

使用扩展屏

点击扩展屏,再点击模拟器工具栏返回按键,即可返回上一级目录。按键主屏和最近暂不支持在扩展屏上使用。

从扩展屏底部上滑,可直接清除应用。

删除屏幕

点击多屏界面上的删除按钮,再点击应用,即可删除一块屏幕。

Car设备多屏能力

Car模拟器支持多屏能力,通过添加副屏,可模拟驾驶舱主屏幕和副驾驶屏幕的场景。

在创建Car模拟器时,支持新增或删除屏幕,新增屏幕后,启动模拟器会自动展示副屏。

Car模拟器的每个屏幕对应一个独立用户,主屏与副屏的操作相互独立。例如安装、调试、卸载应用,主屏和副屏都需要独立操作。

安装应用:可以通过拖拽安装的方式同时安装主屏和副屏,或使用hdc命令分别安装,通过-u参数指定用户,主屏是100,副屏是101。
调试应用:调试时默认对主屏进行调试,如需调试副屏,需要单独进行attach调试。
三指移屏:从26.0.0 Beta2版本开始,支持三指移屏功能。当存在副屏时,使用三指操作,按下Ctrl键(macOS为Command)+Shift键+鼠标左键,会弹出三指移屏界面。按住鼠标左键选中并拖动应用,可以将应用从主屏拖动至副屏中展示并操作。副屏上退出应用后,如需再次操作,需要重新进行三指移屏。

新增屏幕后,如果使用时不需要展示副屏,可点击模拟器工具栏多屏按钮,将对应屏幕去勾选并点击应用。

Car模拟器支持两种布局方式,书页式层叠布局和平铺式布局,可通过工具栏多屏按钮进行切换,切换后点击应用。

书页式层叠布局
平铺式布局

本地真机运行应用

在本地真机中运行HarmonyOS应用/元服务,可以采用USB连接方式或者无线连接方式。另外:Wearable设备仅支持无线连接方式(Lite Wearable设备不支持)。

先决条件

确保设备系统版本升级到HarmonyOS NEXT Developer Beta1或以上。
在真机设备上查看设置 > 系统中开发者选项是否存在,如果不存在,可在设置 > 具体的设备名称中,连续七次单击软件版本,直到提示“开启开发者选项”,点击确认开启后输入PIN码(如果已设置),设备将自动重启,请等待设备完成重启。
在设备运行应用/元服务需要根据配置调试签名章节,提前对应用/元服务进行签名。

USB连接方式

使用USB方式,将真机设备与PC端进行连接。

在设置 > 系统 > 开发者选项中,打开USB调试开关(确保设备已连接USB)。
在真机设备中会弹出“允许USB调试”的弹框,单击允许。
在菜单栏中,单击Run>Run'模块名称'或,或使用默认快捷键Shift+F10(macOS为Control+R)运行应用/元服务。
DevEco Studio启动HAP的编译构建和安装。安装成功后,设备会自动运行安装的HarmonyOS应用/元服务。

检测无设备

设备连接后,如果DevEco Studio无法识别到设备,显示“No Devices”,可使用设备连接助手来排查问题。点击设备下拉框,并点击Troubleshoot Device Connections打开该功能,分为三个步骤,每个步骤排查完后点击Next排查下一个。

通过USB连接设备:根据界面提示,使用USB连接设备后,点击Rescan Devices按钮,扫描已连接的设备,确保扫描结果中包含待调试的设备。

启用USB调试:根据界面提示,确保设备系统版本正确,并且启用开发者选项和USB调试。

重启HDC服务:如果DevEco Studio仍然无法识别设备,点击Restart hdc Service按钮重启HDC服务,重启后HDC会重新识别设备。

无线连接方式

将真机设备和PC连接到同一WLAN网络。

在设置 > 系统 > 开发者选项中,打开无线调试或通过WLAN调试(Wearable设备)开关,并获取设备端的IP地址和端口号。

👋

连接设备,有两种方式。

通过DevEco Studio连接。

6.1.1及以上版本:单击菜单栏Tools > IP Connection,或者在设备下拉列表单击IP Connection,按照IP: port格式输入设备的IP地址和端口号,单击Connect连接设备,连接成功后会显示在列表中,默认开启屏幕常亮。

开启屏幕常亮后,DevEco Studio会持续向设备发送亮屏指令,使设备屏幕常亮。即使手动将设备锁屏,屏幕也会自动亮起,这是DevEco Studio为保持屏幕常亮而发送亮屏指令的正常行为。

如需退出屏幕常亮,有以下方式:

在IP Connection面板中单击Disable Screen Always-On。
断开设备连接。

退出后,DevEco Studio将停止发送亮屏指令,设备可正常进入休眠。

通过hdc连接。

在菜单栏中,单击Run>Run'模块名称'或,或使用默认快捷键Shift+F10(macOS为Control+R)运行应用/元服务。

DevEco Studio启动HAP的编译构建和安装。安装成功后,设备会自动运行安装的HarmonyOS应用/元服务。

配置调试签名

针对开发调试场景,DevEco Studio为开发者提供了自动签名方案,帮助开发者高效进行调试。此外,也可以选择手动签名方式生成调试签名。

👋

自动签名仅用于调试场景,方便开发者进行应用调试。部分调试场景下必须使用手动签名:

当需要进行跨设备调试、跨应用交互调试、断网情况下调试或者多用户共同开发且需要共享密钥时,必须使用手动签名。
如果开发过程中使用到需要审批的权限时,例如:使用部分不支持自动签名的受限开放权限时,必须使用手动签名。支持自动签名的ACL权限清单请参见自动签名支持的ACL权限。
需要华为业务方审核的权限时(例如华为账号一键登录等),必须使用手动签名。
若kit需要配置指纹,建议使用手动签名。
发布场景必须使用手动签名。

自动签名

自动签名新增关联注册应用的方式,签名操作界面新增“Associate with registered application”选项。

关联注册应用的自动签名:与应用市场(AppGallery Connect,简称AGC)的应用绑定,可在DevEco Studio开通开放能力。
未关联注册应用的自动签名:未与应用市场的应用绑定,不支持在DevEco Studio开通开放能力。

约束与限制

从DevEco Studio 6.1.1 Beta1版本开始,关联注册应用的自动签名支持在所有国家/地区使用。

使用自动签名前,请确保本地系统时间与北京时间(UTC/GMT+08:00)保持一致。如果不一致,将导致签名失败。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-18 23:51:11 HTTP/2.0 GET : https://c.mffb.com.cn/a/503176.html
  2. 运行时间 : 0.196007s [ 吞吐率:5.10req/s ] 内存消耗:4,583.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=03ee140d11dcda0ebd9a56b70c74505c
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001094s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001720s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000758s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000692s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001384s ]
  6. SELECT * FROM `set` [ RunTime:0.000534s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001323s ]
  8. SELECT * FROM `article` WHERE `id` = 503176 LIMIT 1 [ RunTime:0.001308s ]
  9. UPDATE `article` SET `lasttime` = 1787068271 WHERE `id` = 503176 [ RunTime:0.018063s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000405s ]
  11. SELECT * FROM `article` WHERE `id` < 503176 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000610s ]
  12. SELECT * FROM `article` WHERE `id` > 503176 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000449s ]
  13. SELECT * FROM `article` WHERE `id` < 503176 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007012s ]
  14. SELECT * FROM `article` WHERE `id` < 503176 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000940s ]
  15. SELECT * FROM `article` WHERE `id` < 503176 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003168s ]
0.197862s