欢迎光临
我们一直在努力

没有真机测多设备适配:模拟器要改四个路径,有三件事它做不到


先说结论

没有真机是可以做多设备适配的,前提是接受两条边界:

  • 模拟器能给你多种设备形态的布局与断点验证,这对适配工作来说已经够用
  • 模拟器给不了物理传感器相关的行为,凡是依赖硬件输入的能力都测不了

下面按操作顺序说。

一、准备:一个账号,一次下载

下载需要登录。 官网的 DevEco Studio 下载页要求登录华为账号,进不去下载中心就拿不到安装包。如果没有账号,先去注册。

账号之外还要实名。 SDK 组件与模拟器镜像的下载,可能要求账号完成实名认证,审核要一到三个工作日。这一步建议最先做,否则装到一半发现镜像拉不下来,只能干等。

二、四个路径,全都要改到非系统盘

这是整个配置里最容易出错的地方。安装过程中会涉及四个不同的路径,默认全部落在 C 盘,需要逐个改掉。

为什么必须改: 我这边 C 盘只剩 30 GB 可用,而 IDE 加 SDK 加模拟器镜像,全量要 60 GB 以上。装到一半爆盘,报出来的错还跟磁盘无关,很难往这个方向想。

四个路径分别是:

  • IDE 安装路径,在安装向导里点 Browse 改。注意路径不能有中文和空格,D:\\DevEcoStudio 这种形式最稳
  • SDK 路径,首次启动时的 SDK Configuration 页面可以指定;装完之后也能在设置里改
  • 模拟器镜像路径,在 Device Manager 的镜像选择页顶部,有一行"本地镜像位置",右侧有编辑按钮
  • 模拟器实例路径,在 Device Manager 底部的"本地模拟器位置",同样有编辑按钮
  • 第三和第四是两个独立的设置项,必须分别改。 这一点很容易漏,我第一次只改了底部的实例路径,以为万事大吉,结果镜像仍然默认下到 C 盘。

    改完之后,去这两个目录确认文件真的落在 D 盘:镜像目录下会出现 system-image 和 licenses,实例目录下会有你创建的设备名文件夹。

    三、两个前置条件,不满足就白装

    条件一:CPU 虚拟化必须已启用。

    模拟器依赖硬件虚拟化。没开启的话,模拟器根本起不来,报的错通常跟 Hypervisor 相关。

    查法:任务管理器 → 性能 → 看"虚拟化"这一项是否显示"已启用"。没启用就要进 BIOS 打开。

    条件二:内存要够,这是最容易被低估的一条。

    我这边主机 16 GB,实际已用 12.7 GB,只剩约 3 GB;而模拟器实例默认要 4 GB。

    拿不到足够内存的后果不是报错,而是启动极慢且看起来像卡死。我第一次启动等了很久都没进系统,一度以为装坏了。

    所以跑模拟器之前,先把浏览器、安全软件这类吃内存的程序关掉。 我这边 360 安全卫士是主要占用者之一。

    另外补一个机制上的原因:模拟器首次启动没有快照可用,只能走完整的冷启动,所以第一次特别慢。第一次跑通之后,后续重启走的是快照恢复,会明显快起来。

    四、从配置到跑通,还差三步

    前三步做完,模拟器只是“建好了”,还没跑过任何一行代码。真正验证链路要再走三步。

    第一步:配签名

    文件 → 项目结构 → 签名配置 标签 → 勾选 自动生成签名文件。

    这一步需要一个已经连接中的设备。我第一次配的时候模拟器还没启动,报的错是这样的:

    「缺少设备导致无法新建 profile 文件,请先通过 IP 或 USB 连接设备。」

    解法很简单,但顺序不能反:先把模拟器启动起来,设备连上了,再回来配签名。

    判断设备是否连上,可以用 SDK 工具链里的 hdc 问一下(在 sdk/default/openharmony/toolchains/ 目录下):

    hdc list targets

    返回一个地址(形如 127.0.0.1:5555)就说明连上了;返回空则表示还没有设备。

    配成功后,签名产物会落在用户目录下的 .ohos\\config 里,包含 .cer、.csr、.p12、.p7b 四个文件。

    顺带说,那个报错对话框自己还给了一条退路:

    如果是在模拟器上安装 HAP 包,可以跳过签名这一步骤。

    也就是说模拟器场景下,签名并不是硬门槛。

    第二步:选设备,点运行

    顶部工具栏会有一个设备下拉框,选中你的模拟器,然后点运行按钮。

    如果下拉框是空的,说明模拟器还没启动完,回上一步再等。

    第三步:确认装上了

    判断标准只有一个:模拟器桌面上出现你的应用图标。

    我这边从点运行到安装完成,用时 14 秒(首次全量构建之后会更快)。DevEco 底部会给出明确的耗时提示。

    一个容易漏的细节:设备类型要勾全

    新建工程时有个「设备类型」勾选项,默认只勾了 Phone。

    但你的模拟器很可能是平板。如果不把 Tablet 一起勾上,设备类型声明里就没有平板,装到平板上可能被拦。

    这一步在建工程时就该做,等运行报错了再回头改,会多绕一圈。

    五、模拟器能给你十种设备形态

    这是它真正有用的地方。模拟器的设备清单不是随便凑的,我把它安装目录里的设备配置文件读了一遍,官方支持的形态包括:

    手机、折叠屏、阔折叠、三折叠、平板、2in1、折叠 2in1、电视、智能表、儿童表、车机。

    对多设备适配来说,这个列表的价值在于:

    • 手机、折叠屏、平板三种形态之间的差异,是适配工作的主体部分
    • 阔折叠和三折叠是较新的形态,它们的宽高比和普通折叠屏不一样,能在模拟器里直接切出来验证
    • 2in1 与折叠 2in1 覆盖了桌面形态,做跨端布局时用得上

    换个说法:适配工作中"布局该怎么断、控件该怎么排"这部分,模拟器覆盖得相当完整。

    六、它做不到的三件事

    这部分是我实际撞过墙的地方,写下来省得别人再试。

    第一件:依赖物理传感器的能力,模拟器给不了真实输入。

    模拟器的传感器是虚拟注入的,它不会因为你拖动窗口就产生真实的加速度、角速度、握持姿态数据。凡是靠这些数据驱动的交互,在模拟器上验证不了。

    第二件:需要真实物理形态变化的能力。

    折叠屏的状态监听这类能力,我可以验证"代码拿到状态值之后的行为",但没法验证"铰链真的折到某个角度时系统报什么"。模拟器能模拟形态切换,模拟不了物理过程。

    第三件:相机采集类能力。

    模拟器有相机配置,我在它的 properties 目录里看到过多种相机参数文件,说明它支持虚拟摄像头。但注入的是虚拟画面,不是真实场景。

    这一点直接决定了:任何依赖真实拍摄的能力,在没有真机的情况下写不了。 我原本想做的几个新能力方向就是因此放弃的。

    七、一个必须记住的版本陷阱

    装完以后去模拟器的设置里看"关于本机",你会发现一个容易出错的地方。

    SDK 自己声明的版本,和你设备里显示的版本,对不上。

    我这边的情况是:

    • SDK 的配置文件里,displayName 写的是 HarmonyOS 26.0.0
    • 但模拟器的"关于本机"里,系统版本显示的是 HarmonyOS 7.0.0,软件版本 7.0.0.106

    文章、文档、发布说明里写版本号时,以设备实测为准。 这不是笔误,是工具链与系统两套版本号命名规则并存造成的。

    顺带补一句:模拟器的镜像列表提供了多个系统版本,从较低版本一路到 7.0.0。如果你的适配工作需要覆盖不同系统版本的行为差异,这里是可以做出对比的,而且镜像都放在非系统盘的话,磁盘空间通常够用。

    八、还有一个工程侧的坑

    不要把 SDK 目录当成工程打开。

    我一开始为了看 SDK 里的声明文件,直接把 sdk 目录用"打开项目"打开了。结果是「工程同步失败」,点重试也没用。

    原因是 SDK 目录里没有工程所需的构建配置文件,IDE 拿它按工程去同步,必然失败。

    正确做法:打开一个真实工程,再用"转到文件"(快捷键通常是 Ctrl + Shift + N)搜索并打开 SDK 里的声明文件。这样文件是在有效工程上下文里打开的,跳转和提示都正常。

    最后

    把这几步串起来,就是没有真机时的完整路径:

    注册并实名账号 → 下载 IDE → 四个路径全改到非系统盘 → 确认虚拟化已启用 → 关掉吃内存的程序 → 建模拟器 → 配签名 → 跑通第一个应用 → 用多形态验证适配。

    它做不到的那三件事,在这个流程之前就该想清楚,因为它们决定了你的选题范围,而不是编码方式。


    本系列其他文章

    • 我把 HarmonyOS 的折叠屏 API 翻了一遍:10 个折叠状态,你大概只处理了 3 个
    • 我读了 HarmonyOS 的断点声明:有 5 个档位,高度断点算的其实是宽高比
    • 画中画起不来的三种原因:设备支持、设置开关、窗口可见是三件事
    • 悬浮窗有 6 个状态,第 5 个叫"在悬浮球里"
    • 窗口舞台的两套生命周期枚举:4 个成员同名,其中 2 个的值不一样
    • 打点 API 分两代:API 8 的老三件套,API 19 的新五件套
    • 线程优先级有三个枚举,HIGH 在其中两个里是 0,在另一个里是 2
    • 泄漏监测的阈值分前后台:前台默认 5,后台默认 1
    • V1 写 aboutToAppear(),V2 写 @ComponentAppear:同一个生命周期的两种写法
    赞(0)
    未经允许不得转载:171主机测评 » 没有真机测多设备适配:模拟器要改四个路径,有三件事它做不到
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址