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 源码下载
- godot原仓库:https://github.com/godotengine/godot
- 大佬移植修改的仓库:https://github.com/kdada/godot
- 忆の夢 修改仓库:https://github.com/Kaiter-Plus/godot
这里我们使用 忆の夢 的修改仓库进行编译。
首先使用 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:
之后,在打开的选项卡里选择 OpenHarmony SDK
:
首次打开就会提示你下载 SDK,直接点击 Location 后面的 Edit,然后一直点下一步就行了。
不过需要注意的是,DevEco 会自动下载 18 版本的 API,然而目前支持 API 18 的机型很少。因此我的建议是,把 API 18 的内容全都取消勾选了,换成 API 15,可能会好一些。
全都搞好后点击 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 分钟。
后来又看了零炻大佬的教程,发现可以直接在编译命令中指定 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 的选项。
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 个小时的时间,取决于设备性能。
(虽然图片里编译的不是一个东西,但意思是一样的)
编译好后还可以再编译一份 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
接下来依据官方文档,进入 %APPDATA%\Godot\export_templates\<version>\
文件夹,将这几个文件拷贝进去:
之后再尝试打包就不会出现找不到模板的问题了。
3. 游戏打包
3.1 游戏工程文件
如果你已经编译好了 Editor 和模板文件,或是从别处下载了已经编译好的 Editor 和模板文件,就可以将自己的 Godot 游戏进行打包了。
这里我是用我之前根据视频教程做的一个 2d 平台跳跃游戏进行示例。游戏本身非常简单,完全是为了学习 Godot 的示例项目。
如果你也想跟着做一个这样的游戏,可以参考: 视频链接
之后我也会把工程文件放在网盘中。
3.2 打包
打开工程文件。如果直接尝试打包,还是会报错。我们一个一个解决。
首先找到 编辑器 > 编辑器设置
再在其中找到 导出 > OpenHarmony
在 OpenHarmony Tool Path 中,填入之前 DevEco Studio 的安装地址。
之后,在编辑器的右上角,点击 兼容 改为 Forward+。
对于最后一个报错,只需要点击一下“修复导入”即可。
这些问题都解决后,就可以尝试导出了。
然后......接着报错
3.3 Bug 修复
不出意料,导出时又遇到 bug 了。
这次提示:
这个我真不会修了。不过好在工程文件已经生成了,接下来就切换到 DevEco Studio 进行工作吧。
使用 DevEco Studio 打开之前导出时选择的目录,目录左侧为特殊图标,比较好找。
等待 Sync 完成后,就可以打包了。
这里,我们选择 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.
这个报错没有道理的,我明明使用的是模板,怎么会有文件名错误!不过毕竟人家报错了不能不管。我的做法是,找到报错提示的那几个文件,直接删了。
(删除这两个)
再次打包,再次报错。同样的错误,不同的文件。再删一次就好了。
(这次是这三个)
再次打包,终于成功!
接下来就可以考虑往真机上推送了。不过还有几个设置需要设置一下。点击 File > Project Structure
4c6a676f-170c-4335-9bfb-2717c9f2b770.png
在 Compatible SDK 中,改为 5.0.5(17)
,原因之前有讲。
再点击右边的 Singing Config
登录一下,连接好你的设备,配置好签名信息。
最后在右上角选择好设备,点一下绿色的三角形,就可以将游戏推送至你的设备啦!
(图为在笔者的 MatePad Pro 13.2 上运行自己编写的游戏的截图)