一文掌握 HarmonyOS5 模拟器与真机调试技巧
前言
DevEco Studio 的预览器可以提供高效的 UI 实时反馈,但要进行全面的功能测试、性能分析及硬件相关功能调试,仍需在模拟器或真机上运行应用。
模拟器的安装与启动参考往期文章:【HarmonyOS 5开发入门】DevEco Studio安装配置完全指南
使用本地真机运行应用/服务
设备连接
- USB 连接:
通过 USB 线将 Phone 或 Tablet 连接至 PC,在设备的设置 > 系统 > 开发者选项
中开启 USB 调试。设备上弹出授权对话框时,点击“允许”。
- 无线连接:
开启“无线调试”,通过 IP 地址连接设备:
hdc tconn 设备IP地址:端口号
设备管理
在 DevEco Studio 底部的 Device Manager 中查看已连接设备,确认设备状态、系统版本和连接方式。
应用部署
点击菜单栏 Run > Run '模块名'
,或使用快捷键:
- Windows/Linux:
Shift + F10
- macOS:
Control + R
调试技巧
- 断点调试:点击代码行号旁边设置断点
- 日志查看:使用
Logcat
窗口实时查看日志 - 性能监控:内置工具可监控 CPU、内存等性能指标
- 热更新:支持代码变更后无需重新安装即可快速同步至设备
使用模拟器运行应用/服务
系统要求
- 操作系统:Windows 10/11 64位、macOS 10.15+
- CPU:支持 VT-x / AMD-V 虚拟化
- 内存:8GB 起(推荐 16GB)
- 硬盘:至少 10GB 可用空间
前置条件
- 在 BIOS 中启用虚拟化功能
- 安装最新版 DevEco Studio
- 下载并安装所需模拟器系统镜像
模拟器 vs 真机
项目 | 模拟器 | 真机 |
---|---|---|
性能 | 依赖主机硬件,处理图形计算时较慢 | 实际性能表现,流畅 |
硬件支持 | 仅支持部分传感器、功能受限 | 完整支持 |
系统服务 | 接近但不完全一致 | 精准反映真实环境 |
适用测试 | UI、功能流程测试 | 性能、兼容性、硬件相关测试 |
操控屏幕
操作方式 | 描述 |
---|---|
滑动 | 鼠标左键拖动 |
拖动项目 | 鼠标左键长按拖动 |
单击 | 鼠标左键点击 |
双击 | 快速双击左键 |
长按 | 长按左键后释放 |
输入文字 | 鼠标点击输入域,使用键盘输入 |
缩放 | 按住 Ctrl (或 Command ),模拟双指缩放 |
垂直滑动 | 使用鼠标滚轮滚动菜单 |
复制粘贴 | 支持最大文本长度为 30,000 个英文字符 |
使用工具栏
按键 | 功能 |
---|---|
关闭/最小化/置顶 | 控制模拟器窗口显示 |
左右旋转 | 屏幕旋转 |
音量调整 | 增减音量 |
截屏 | 保存当前屏幕图像 |
主屏/返回/最近 | 模拟系统导航键 |
摇一摇 | 触发摇一摇操作 |
电池/GPS/传感器 | 打开对应模拟面板 |
设置 | 配置模拟器属性 |
Bug 报告 | 导出日志并提交问题 |
折叠展开 | 模拟折叠设备形态变换 |
移动与缩放模拟器窗口
- 拖动标题栏移动窗口
- 支持缩放比例(50%、100%、150%)
- 支持全屏模式(F11 切换)
- 支持多窗口并排显示
应用安装与文件传输
应用安装
- 方法一:拖拽
.hap
文件到模拟器窗口 - 方法二:使用如下命令行。
hdc install path/to/your/app.hap
文件传输
# 发送文件
hdc file send local_file remote_path
# 接收文件
hdc file recv remote_path local_folder
支持配置共享文件夹,实现主机与模拟器之间文件共享。
扩展能力
- 快照:保存/恢复测试状态
- 硬件模拟:模拟加速度计、陀螺仪、通话、电量等
- 调试工具:性能分析、UI 渲染分析
- 自动化测试:录制操作、批量运行、脚本回放
常见问题与解决方案
问题类型 | 解决方案 |
---|---|
启动失败 | 确认开启虚拟化、系统镜像完整、防火墙未拦截 |
网络不通 | 检查网络设置、禁用 VPN/代理、切换 NAT 模式 |
安装失败 | 确认 HAP 包签名、版本兼容、磁盘空间充足 |
性能卡顿 | 减少主机负载、调低分辨率、更新显卡驱动 |
文件无法传输 | 使用命令行传输、确认权限与空间 |
无法连接调试器 | 重启 DevEco Studio、模拟器、检查 HDC 服务 |
HDC 常用命令
设备管理
# 列出所有已连接的设备
hdc list targets
# 连接到指定IP和端口的设备(无线调试)
hdc target connect 192.168.1.100:8710
# 断开与指定设备的连接
hdc target disconnect 192.168.1.100:8710
# 重启设备
hdc target reboot
# 检查设备连接状态
hdc check-status
应用管理
# 安装应用
hdc install path/to/your/app.hap
# 安装多个HAP包
hdc install -m path/to/entry.hap path/to/feature.hap
# 卸载应用
hdc uninstall com.example.app
# 启动应用
hdc shell aa start -a com.example.app.MainAbility -b com.example.app
# 停止应用
hdc shell aa stop -a com.example.app.MainAbility -b com.example.app
# 清除应用数据
hdc shell aa clear -b com.example.app
文件操作
# 从设备拉取文件到本地
hdc file recv /data/storage/el2/base/files/example.db ./local_folder/
# 发送本地文件到设备
hdc file send ./local_file.txt /data/storage/el2/base/files/
# 列出设备目录内容
hdc shell ls -la /data/storage/el2/base/files/
# 删除设备上的文件
hdc shell rm /data/storage/el2/base/files/temp.txt
# 创建设备上的目录
hdc shell mkdir /data/storage/el2/base/files/new_folder
日志与调试
# 查看实时日志
hdc shell hilog
# 按标签过滤日志
hdc shell hilog | grep "MyApp"
# 保存日志到文件
hdc shell hilog > app_log.txt
# 清除日志缓冲区
hdc shell hilog -c
# 设置日志级别
hdc shell hilog -L DEBUG
性能分析
# 显示进程列表
hdc shell ps -ef
# 显示特定应用的进程
hdc shell ps -ef | grep com.example.app
# 查看内存使用情况
hdc shell free -m
# 查看CPU使用情况
hdc shell top -n 1
# 获取应用内存使用详情
hdc shell dumpsys meminfo com.example.app
网络相关
# 端口转发(将设备8080端口映射到本地8888端口)
hdc forward tcp:8888 tcp:8080
# 移除端口转发
hdc forward --remove tcp:8888
# 列出所有端口转发规则
hdc forward --list
# 查看设备网络配置
hdc shell ifconfig
# 测试网络连接
hdc shell ping www.example.com
自动化测试
# 执行UI自动化测试
hdc shell aa test -p com.example.test -s class com.example.test.TestClass
# 模拟输入事件(点击屏幕坐标x=500, y=600)
hdc shell input tap 500 600
# 模拟滑动事件(从(300,500)滑动到(300,100))
hdc shell input swipe 300 500 300 100
# 模拟按键事件(按下返回键)
hdc shell input keyevent 4
# 模拟文本输入
hdc shell input text "Hello%sWorld" # %s表示空格
模拟器专用
# 列出所有可用模拟器
hdc emulator list
# 创建新模拟器
hdc emulator create -n MyEmulator -t phone
# 启动模拟器
hdc emulator start -n MyEmulator
# 停止模拟器
hdc emulator stop -n MyEmulator
# 设置模拟器属性
hdc emulator set -n MyEmulator -k resolution -v 1080x2340
批处理示例
# 执行设备上的Shell脚本
hdc shell sh /data/local/tmp/test_script.sh
# 执行本地Shell脚本并将结果传回
hdc shell < ./local_script.sh > result.txt
# 批量安装多个应用
for hap in ./apps/*.hap; do hdc install "$hap"; done
总结
无论是使用真机还是模拟器进行开发调试,合理选择测试环境与工具,能显著提升开发效率与应用质量。配合强大的 HDC 命令行工具,开发者可以实现高效部署、调试与自动化测试,是日常 HarmonyOS 应用开发的核心能力之一。
如有疑问,欢迎随时私信交流!
一文掌握 HarmonyOS5 模拟器与真机调试技巧的更多相关文章
- 从零学习Fluter(二):win10上环境搭建以及模拟器和真机调试
今天呢,又继续看了flutter 弗拉特 的东西,绝的这个东西绝对是比ReactNative更高一层次的,在2018年12月5好,flutter的第一个stale1.0发布了,我们在GitHub上可以 ...
- ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机
ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机 如果你所用的framework支持真机和模拟器多种CPU架构,而你需要的是其中的一种或几种,那么可以可以从framewo ...
- Xcode模拟器和真机生成的日志查看(转载)
在进行实际代码开发的过程中,我们会生成一些plist文件,但是如何在调试过程中查看这些plist文件是否被成功生成以及生成的内容是否正确? 如果查看模拟器生成的日志和真机生成的日志到底如何查看? DE ...
- [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库
转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...
- iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用
问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...
- 利用lipo编译合并iPhone模拟器和真机通用的静态类
利用lipo编译合并iPhone模拟器和真机通用的静态类 如何编译静态类库,而且现在网上也有很多的教程,现在问题时我们编译好了的静态类库会时两个版本的.a文件,分别用于模拟器和iPhone真迹,因此M ...
- Android 如何添加一个apk使模拟器和真机都编译进去 m
添加一个apk都需要将LOCAL_PACKAGE_NAME的值添加到PRODUCT_PACKAGES才行.而PRODUCT_PACKAGES一般在build/target/product/目录下的文件 ...
- android应用程序monkey压力测试(模拟器或真机)
首先需要安装一个模拟器: 前置条件: 1.jdk环境配置 2.eclipse下载安装(直接解压即可) 3.网站上下载ADT: 由于国内禁止google的浏览,所以需要自己上网找资源,下面这个网站有比较 ...
- iOS开发--使用lipo命令制作模拟器与真机通用静态库
通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...
- 判断IOS静态库(.a文件)是否支持模拟器和真机运行
判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...
随机推荐
- delphi+sql数据库增加,删除,修改,查询操作
需要注意的是,open一般用于查询(select),exesql用于修改,插入,删除(update,insert,delete) 增加 with dm.DataModule1.ADOQuery1 do ...
- Code First 初始化数据时发生异常
问题重现 用Entity Framework的Code First默认生成的数据库文件被我直接删除了, 然后不管怎么重新编译等等, 运行后总是会报错如下: 解决方案同下 Cannot attach t ...
- springboot和jdk的版本对应关系
spring-boot和jdk的版本对应关系 SpringBoot Versions JDK Versions 0.0 -1.1 6+(6 or higher) 1.2 - 1.5 6 - 7 2.0 ...
- ESP32+Arduino入门(三):连接WIFI获取当前时间
ESP32内置了WIFI模块连接WIFI非常简单方便. 代码如下: #include <WiFi.h> const char* ssid = "WIFI名称"; con ...
- 一文速通 Python 并行计算:07 Python 多线程编程-线程池的使用和多线程的性能评估
一文速通 Python 并行计算:07 Python 多线程编程-线程池的使用和多线程的性能评估 摘要: 本文介绍了 Python 线程池(ThreadPoolExecutor)的使用方法,包括线程池 ...
- cocos3 Shader的CCProgram模板详解
这段内容描述的是一个 着色器(Shader) 的基本结构模板,可能用于一种自定义的着色器语言或框架(例如基于某种图形渲染引擎或中间表示语言扩展的着色器定义方式).以下是逐部分解析其含义: 1. CCP ...
- 痞子衡嵌入式:在含多个i.MXRT的主从系统中共享一颗Flash启动的方法与实践(上篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是多个i.MXRT共享一颗Flash启动的方法. 有些特殊的客户应用会采用多颗 i.MXRT 芯片设计一主多从的硬件架构(目的不一,或仿多 ...
- Oracle 使用UTL_HTTP发送http请求--转载
参考:https://blog.csdn.net/tmaczt/article/details/82665885 GET方式 CREATE OR REPLACE FUNCTION FN_HTTP_GE ...
- Springboot 的一些默认配置规则
说明 本文样例说明仅适用 maven 环境和语法,但所述内容也适用 gradle 原文地址:https://www.cnblogs.com/qnlcy/p/15905544.html 一.日志 1. ...
- vue3 学习-初识体验-常见指令v-for和v-model
继续通过小案例来体验一些常用的指令, 以经典的todolist进行展示. 首先呢通过 v-for 指令进行dom循环. v-for 通常是在循环dom的编写的同时遍历数据进行填充. <!DOCT ...