0. 前言

自己刚踩了一天的坑,完成了编译移植。第二天就看见 @零炻 大佬发的视频。只能感叹大佬怎么不早点发啊,我这坑不是白踩了吗(

1. 环境搭建

由于鸿蒙设备目前不支持 Godot 与一系列工具的安装,这里使用 X86 设备进行编译移植。

要想进行移植,必须先准备好以下的环境。

1.1 Python

Python 官网: https://www.python.org/ 安装过程不再赘述。安装完后记得将 Python 添加至环境变量。

1.2 DevEco Studio

打包鸿蒙工程的 IDE,可前往官网安装: https://developer.huawei.com/consumer/cn/deveco-studio/ 安装过程不再赘述。

1.3 scons

scons 为 Godot 使用的编译工具。安装好 Python 后,可使用下面的命令安装:

python -m pip install scons

1.4 gcc python make mingw git

编译 Godot 需要使用到的其他工具。这里我使用 这个链接 的方法进行安装。

1.4.1 安装 scoop

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

1.4.2 设置 proxy

如果不需要代理,请跳过这一步。

# scoop config proxy ip:port
scoop config proxy 127.0.0.1:7890

1.4.3 安装其他工具

scoop install gcc python make mingw git

scoop 会自动处理环境变量,相较于手动安装更为省事。

2. 源码编译

源码编译是一个很耗费时间的过程。如果你不想要编译,我也会提供已经编译好的二进制文件。

不过毕竟鸿蒙平台的 Godot 还在发展中,经常会有新版本。因此学会自己编译还是很有必要的。

2.1 源码下载

这里我们使用 忆の夢 的修改仓库进行编译。

首先使用 git 克隆项目:

git clone https://github.com/Kaiter-Plus/godot.git

当然,如果你不想使用 git 克隆,或者网络条件不佳,直接下载源码的压缩包也是可以的。

2.2 Editor 编译

之后使用命令进行编译:

scons platform=windows

如果直接编译,这里会遇到 bug:

OpenHarmony SDK not found. Please set OPENHARMONY_SDK_PATH to the SDK path.

要解决这个问题,首先得要下载 OpenHarmony SDK。首先打开 DevEco Studio,然后打开 File > Settings:

ff8089a9813817b66689d48d0e0384ba.png

之后,在打开的选项卡里选择 OpenHarmony SDK

aa728bf1d738ce91da1c2665e48ae8ad.png

首次打开就会提示你下载 SDK,直接点击 Location 后面的 Edit,然后一直点下一步就行了。

不过需要注意的是,DevEco 会自动下载 18 版本的 API,然而目前支持 API 18 的机型很少。因此我的建议是,把 API 18 的内容全都取消勾选了,换成 API 15,可能会好一些。

88772598ff63d227816fd8f9ec5b6c86.png

全都搞好后点击 Apply 和 OK 就行了。

不过问题来了,就算自己下载好 SDK 后,进行编译还是会报错。我的解决方案是直接修改源码:

修改 godot\platform\openharmony\detect.py 文件的 57 行,get_default_sdk_path() 这里,改成:

def get_default_sdk_path():
    return "C:\\Users\\ReiyuSeina\\AppData\\Local\\OpenHarmony\\Sdk\\15"

这里你可以根据你前面的 SDK 安装地址改为对应的地址。然后再执行命令,就可以编译了。我的编译这一步花费了约 20 分钟。

ddac611e317bd69905d901728811b3a5.png


后来又看了零炻大佬的教程,发现可以直接在编译命令中指定 SDK 地址,确实是方便一些:

scons platform=openharmony target=template_debug generate_bundle=yes module_mono_enabled=no  OPENHARMONY_SDK_PATH="C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony"

编译后在 godot\bin下就可以看见编译好的 Godot 可执行文件了。随便打开一个项目,可以看见导出至 OpenHarmony 的选项。

QQ_1754445310875.png

2.3 导出模板编译

前面我们只是编译了编辑器,还不能直接导出游戏的可执行文件。接下来需要编译导出模板。

我一开始使用

scons platform=openharmony target=template_debug

这个命令进行编译,不过是有问题的。这种方式只可以编译出一个 libgodot.openharmony.template_debug.arm64.so 文件,不能直接打包。后面还需要压缩以下 template 文件夹,还要改一大堆 bug。所以这里换一种方式。

前面我引用的零炻大佬的命令,实际上就是编译打包模板的命令。

scons platform=openharmony target=template_debug generate_bundle=yes module_mono_enabled=no  OPENHARMONY_SDK_PATH="C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony"

这一步比较费时,需要花费 1 到 2 个小时的时间,取决于设备性能。

ebd38cd2bed6e70268ce19e2b1c0a17d.png

(虽然图片里编译的不是一个东西,但意思是一样的)

编译好后还可以再编译一份 release 版本:

scons platform=openharmony target=template_release generate_bundle=yes module_mono_enabled=no  OPENHARMONY_SDK_PATH="C:/Program Files/Huawei/DevEco Studio/sdk/default/openharmony"

编译好之后就可以在 godot/bin 下看见下面的这些文件了:

  • libgodot.openharmony.template_debug.arm64.so
  • libgodot.openharmony.template_release.arm64.so
  • openharmony_debug_arm64-v8a.zip
  • openharmony_release_arm64-v8a.zip

aa779dbd9e081bc0260ec129d4932722.png

接下来依据官方文档,进入 %APPDATA%\Godot\export_templates\<version>\ 文件夹,将这几个文件拷贝进去:

1a70502834fd32ab5a6479a6b3039247.png

之后再尝试打包就不会出现找不到模板的问题了。

QQ_1754445993278.png

3. 游戏打包

3.1 游戏工程文件

如果你已经编译好了 Editor 和模板文件,或是从别处下载了已经编译好的 Editor 和模板文件,就可以将自己的 Godot 游戏进行打包了。

这里我是用我之前根据视频教程做的一个 2d 平台跳跃游戏进行示例。游戏本身非常简单,完全是为了学习 Godot 的示例项目。

如果你也想跟着做一个这样的游戏,可以参考: 视频链接

之后我也会把工程文件放在网盘中。

QQ_1754446490236.png

3.2 打包

打开工程文件。如果直接尝试打包,还是会报错。我们一个一个解决。

首先找到 编辑器 > 编辑器设置

b1c29001-1fc0-424b-ac65-95a732a96b23.png

再在其中找到 导出 > OpenHarmony

QQ_1754446666570.png

在 OpenHarmony Tool Path 中,填入之前 DevEco Studio 的安装地址。

之后,在编辑器的右上角,点击 兼容 改为 Forward+。

821312df-81e3-4473-a767-10c9f7a0b911.png

对于最后一个报错,只需要点击一下“修复导入”即可。

da9f3b2d38f9657ae415b0ae56aa1ce7.png

这些问题都解决后,就可以尝试导出了。

然后......接着报错

3.3 Bug 修复

不出意料,导出时又遇到 bug 了。

QQ_1754447640193.png

这次提示:

Currently module for 'libentry.so' is not verified. If you're importing napi, its verification will be enabled in later SDK version. Please make sure the corresponding .d.ts file is provided and the napis are correctly declared.

这个我真不会修了。不过好在工程文件已经生成了,接下来就切换到 DevEco Studio 进行工作吧。

使用 DevEco Studio 打开之前导出时选择的目录,目录左侧为特殊图标,比较好找。

等待 Sync 完成后,就可以打包了。

e9f53380-d349-4554-9a50-c60c360b7c34.png

这里,我们选择 build HAP

然后不出意外的,再次报错:

> hvigor ERROR: Tools execution failed.
Error Code: 11211116
Error: Resource Pack Error
Error Message: Invalid resource name 'foreground.png', it should be match the pattern [a-zA-Z0-9_]. At file: C:\ws\godot\Plataformas2d\Plataformas2d3\AppScope\resources\base\media\foreground.png.import
* Try the following:
  > Modify the name to match the pattern [a-zA-Z0-9_].
Error Code: 11211116
Error: Resource Pack Error
Error Message: Invalid resource name 'background.png', it should be match the pattern [a-zA-Z0-9_]. At file: C:\ws\godot\Plataformas2d\Plataformas2d3\AppScope\resources\base\media\background.png.import
* Try the following:
  > Modify the name to match the pattern [a-zA-Z0-9_].
     Detail: Please check the message from tools.

这个报错没有道理的,我明明使用的是模板,怎么会有文件名错误!不过毕竟人家报错了不能不管。我的做法是,找到报错提示的那几个文件,直接删了。

QQ_1754447988030.png

(删除这两个)

再次打包,再次报错。同样的错误,不同的文件。再删一次就好了。

e9f53380-d349-4554-9a50-c60c360b7c34.png

(这次是这三个)

再次打包,终于成功!

QQ_1754448162011.png

接下来就可以考虑往真机上推送了。不过还有几个设置需要设置一下。点击 File > Project Structure

4c6a676f-170c-4335-9bfb-2717c9f2b770.png

在 Compatible SDK 中,改为 5.0.5(17),原因之前有讲。

QQ_1754448162011.png

再点击右边的 Singing Config 登录一下,连接好你的设备,配置好签名信息。

最后在右上角选择好设备,点一下绿色的三角形,就可以将游戏推送至你的设备啦!

68ef0d56bfd1991ebad195bb8cb3b561.jpg

(图为在笔者的 MatePad Pro 13.2 上运行自己编写的游戏的截图)

最后修改:2025 年 08 月 08 日
如果觉得我的文章对你有用,请随意赞赏