Cris.Q

Back

DevEco Studio 移植笔记Blur image

前几个月买了个华为的平板,一直想趁机搞搞鸿蒙开发,但苦于 DevEco 不支持 Linux,遂开始考虑是否可能进行移植。

准备工作#

获取 DevEco Studio 的 Windows版#

我们这里从华为官方下载Windows版本的安装包(本文撰写时可下载的版本是DevEco Studio 6.0.2 Release),通过wine安装即可。安装配置全部保持默认,则DevEco的程序本体应该在~/.wine/drive_c/Program Files/Huawei/DevEco Studio下,我们进入该目录。

获取 IDEA#

由于目前的 DevEco Studio 是基于IDEA修改制作而成的,所以我们需要一份IDEA的Linux版作为参考,我下载的版本是2025.3.2

进行解压和整理后我们的目录格式如下:

.  
├── DevEco Studio  
│   ├── bin  
│   ├── ......
│   └── tools  
└── idea-IU-253.30387.90  
	├── bin  
	├── ......
	└── plugins
bash

移植环境#

移植JBR#

JBR ( Jetbrains Runtime ) 是由 JetBrains 制作的 JDK 改版,我们下载 IDEA 时就已经包含在内。直接复制替换DevEco Studio中的jbr目录即可。

当然,IDEA 和 DevEco 使用的 JBR 版本不一定相同,如果你希望 JBR 版本完全匹配,可以通过wine打印一下DevEco的jbr版本,再到Github上进行下载。

移植Node#

华为的构建工具要么是用nodejs写的要么使用python写的,查看tools/node,发现NodeJS版本是v18.20.1 LTS,于是在官网下载该版本,解压,替换原目录。(这里为了和Windows版本的目录结构保持一致,我将node/bin子目录下的文件全部软链接到了node目录)

此时tools目录下应该有node文件夹。

替换libs#

进入lib目录,复制 IDEA 样本中的native, pty4j, jna三个目录并替换DevEco中的目录

替换OpenHarmony SDK#

这里用下载好的OpenHarmony SDK替换sdk/default/openharmony即可。(至于如何下载,可以直接使用DevEco提供的下载工具,你可以先跳过本步,做完其他步骤,之后应该能在Linux上打开它并下载SDK了)

逆向官方启动器#

由于华子大概率是直接搬的官方启动器,这里我直接用 ida 逆了 bin/idea。最有用的函数应该是xplat_launcheer::main_lib在GPT的帮助下得出的 结论如下:

  1. 启动器使用世界上最好的语言 Rust 编写
  2. 启动器加载时会向当前目录的上层递归读取product-info.json文件,最大深度为5
  3. 启动器会加载properties文件,具体加载的是

因此,我们通过编写product-info.jsondevecostudio.vmoption,即可完成最后的移植工作。

编写相关配置文件#

这部分就不多赘述,给出可以抄作业的VMOption & product-info & idea properties:

这里值得注意的一个 fun fact 是:如果你使用sun.java2d.uiScale=true开启 IDEA 推荐的 Scale by OS,华为奇怪的插件加载机制会搞砸一切!所以这里设置为false,我们就完成了全部的移植工作。

处理签名问题#

此时的DevEco看起来已经可以正常开发了,但在签名时会遇到奇怪的问题:

2026-02-05 22:20:54,000 [ 490226]   WARN - #com.huawei.deveco.projectmgmt.hos.s  
ignature.sign.utils.AutoGenerateKeyCSRUtil - No available JDK is found.  
2026-02-05 22:21:00,716 [ 496942]   WARN - #com.huawei.deveco.projectmgmt.hos.s  
ignature.sign.utils.AutoGenerateKeyCSRUtil - No available JDK is found.
plaintext

我们使用 Recaf 逆向该组件。(如果有做Java逆向的朋友,真心推荐Recaf,目前用过的最好用的Java反编译/字节码修改工具,绝对的神器级别)。组件位置是plugins/harmony/lib/hos-project-mgmt-6.0.2.640.jar,相关代码是:

String toolPath = homePath + TOOL_PATH;              // /jbr/bin
if (SystemInfo.isMac || SystemInfo.isLinux) {
    toolPath = homePath + MAC_TOOL_PATH;             // /jbr/Contents/Home/bin
}
java

也就是说 Linux 被直接和 Mac 划到一起去了,组件找寻 jbr/Contents/Home/bin/keytool,二实际路径是jbr/bin/keytool

因此我们“伪装路径”,具体方法不做赘述。

移植“模拟器”#

由于鸿蒙的模拟器不开源,我们显然无法强行兼容之,所以这里采用 Oniro Emulator。按照其要求安装配置即可。

效果#

CodeGenie 可用性展示

实机运行可用性展示

模拟器运行可用性展示

DevEco Studio 移植笔记
https://crisq.top/blog/deveco_linux_porting_notes
Author Cris.Q
Published at 2026年1月30日
Comment seems to stuck. Try to refresh?✨