前言

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 模拟器与真机调试技巧的更多相关文章

  1. 从零学习Fluter(二):win10上环境搭建以及模拟器和真机调试

    今天呢,又继续看了flutter 弗拉特 的东西,绝的这个东西绝对是比ReactNative更高一层次的,在2018年12月5好,flutter的第一个stale1.0发布了,我们在GitHub上可以 ...

  2. ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机

    ios  framework 分离与合并多种CPU架构,分离与合并模拟器与真机 如果你所用的framework支持真机和模拟器多种CPU架构,而你需要的是其中的一种或几种,那么可以可以从framewo ...

  3. Xcode模拟器和真机生成的日志查看(转载)

    在进行实际代码开发的过程中,我们会生成一些plist文件,但是如何在调试过程中查看这些plist文件是否被成功生成以及生成的内容是否正确? 如果查看模拟器生成的日志和真机生成的日志到底如何查看? DE ...

  4. [转] iOS开发之使用lipo命令制作模拟器与真机通用静态库

    转自 http://blog.csdn.net/jinglijun/article/details/8276089 通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac ...

  5. iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用

    问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...

  6. 利用lipo编译合并iPhone模拟器和真机通用的静态类

    利用lipo编译合并iPhone模拟器和真机通用的静态类 如何编译静态类库,而且现在网上也有很多的教程,现在问题时我们编译好了的静态类库会时两个版本的.a文件,分别用于模拟器和iPhone真迹,因此M ...

  7. Android 如何添加一个apk使模拟器和真机都编译进去 m

    添加一个apk都需要将LOCAL_PACKAGE_NAME的值添加到PRODUCT_PACKAGES才行.而PRODUCT_PACKAGES一般在build/target/product/目录下的文件 ...

  8. android应用程序monkey压力测试(模拟器或真机)

    首先需要安装一个模拟器: 前置条件: 1.jdk环境配置 2.eclipse下载安装(直接解压即可) 3.网站上下载ADT: 由于国内禁止google的浏览,所以需要自己上网找资源,下面这个网站有比较 ...

  9. iOS开发--使用lipo命令制作模拟器与真机通用静态库

    通常在项目中使用静态库的时候都会有两个版本,一个用于模拟器,一个用于真机,因为Mac和iPhone的CPU不同,才造成了这种情况. 为了模拟器与真机之间切换调试的方便,制作通用版本非常有必要. 现在有 ...

  10. 判断IOS静态库(.a文件)是否支持模拟器和真机运行

    判断IOS静态库(.a文件)是否支持模拟器和真机运行 在mac终端下,进入到.a文件目录下,然后输入: lipo -info libMyAlertView.a Architectures in the ...

随机推荐

  1. delphi+sql数据库增加,删除,修改,查询操作

    需要注意的是,open一般用于查询(select),exesql用于修改,插入,删除(update,insert,delete) 增加 with dm.DataModule1.ADOQuery1 do ...

  2. Code First 初始化数据时发生异常

    问题重现 用Entity Framework的Code First默认生成的数据库文件被我直接删除了, 然后不管怎么重新编译等等, 运行后总是会报错如下: 解决方案同下 Cannot attach t ...

  3. 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 ...

  4. ESP32+Arduino入门(三):连接WIFI获取当前时间

    ESP32内置了WIFI模块连接WIFI非常简单方便. 代码如下: #include <WiFi.h> const char* ssid = "WIFI名称"; con ...

  5. 一文速通 Python 并行计算:07 Python 多线程编程-线程池的使用和多线程的性能评估

    一文速通 Python 并行计算:07 Python 多线程编程-线程池的使用和多线程的性能评估 摘要: 本文介绍了 Python 线程池(ThreadPoolExecutor)的使用方法,包括线程池 ...

  6. cocos3 Shader的CCProgram模板详解

    这段内容描述的是一个 着色器(Shader) 的基本结构模板,可能用于一种自定义的着色器语言或框架(例如基于某种图形渲染引擎或中间表示语言扩展的着色器定义方式).以下是逐部分解析其含义: 1. CCP ...

  7. 痞子衡嵌入式:在含多个i.MXRT的主从系统中共享一颗Flash启动的方法与实践(上篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是多个i.MXRT共享一颗Flash启动的方法. 有些特殊的客户应用会采用多颗 i.MXRT 芯片设计一主多从的硬件架构(目的不一,或仿多 ...

  8. Oracle 使用UTL_HTTP发送http请求--转载

    参考:https://blog.csdn.net/tmaczt/article/details/82665885 GET方式 CREATE OR REPLACE FUNCTION FN_HTTP_GE ...

  9. Springboot 的一些默认配置规则

    说明 本文样例说明仅适用 maven 环境和语法,但所述内容也适用 gradle 原文地址:https://www.cnblogs.com/qnlcy/p/15905544.html 一.日志 1. ...

  10. vue3 学习-初识体验-常见指令v-for和v-model

    继续通过小案例来体验一些常用的指令, 以经典的todolist进行展示. 首先呢通过 v-for 指令进行dom循环. v-for 通常是在循环dom的编写的同时遍历数据进行填充. <!DOCT ...