打包游戏时, 需要选择你想用的引擎类型. 有三个基本类型可以选择:
这些类型即是 Build variants
使用 Project ▸ Build 时使用的是 debug 版引擎.
此版本通常在游戏开发阶段使用, 因为它具有许多有用的调试功能:
print()
功能, 原生扩展使用 dmLogInfo()
, dmLogError()
之类的功能记录日志. 如何阅读日志参见 游戏和系统日志教程.此版本移除调试功能. 准备发布到应用商店时使用此版本. 基于以下原因不推荐发布包含调试功能的游戏:
此版本没有图像和声音. 也就是说它可以 CI 服务器上进行 unit/smoke 测试, 甚至可以在云端作为服务器程序使用.
不但可以为引擎加入原生扩展功能, 还可以从引擎中剔除一些部分. 比如你不需要物理引擎, 就可以从应用中去除. 关于如何去除引擎功能参见 应用清单教程.
实际上 app manifest 有着与 extension manifest 相同的结构和语法. 这使我们能够在最终编译时为每个平台混合上下文配置.
而且, Defold 自身, 有其基础 build manifest (build.yml
). 编译每个扩展时, 这些文件做如下混合:
manifest = merge(game.appmanifest, ext.manifest, build.yml)
用户可以覆盖引擎和每个扩展的默认行为. 而且, 对于最终链接阶段, 我们混合了 app manifest 与 defold manifest:
manifest = merge(game.appmanifest, build.yml)
这是一个参考示例:
platforms:
x86_64-osx:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
x86_64-linux:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
js-web:
context:
excludeLibs: []
excludeJsLibs: []
excludeSymbols: []
libs: []
linkFlags: []
wasm-web:
context:
excludeLibs: []
excludeJsLibs: []
excludeSymbols: []
libs: []
linkFlags: []
x86-win32:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
x86_64-win32:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
armv7-android:
context:
excludeLibs: []
excludeJars: []
excludeSymbols: []
libs: []
linkFlags: []
armv7-ios:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
arm64-ios:
context:
excludeLibs: []
excludeSymbols: []
libs: []
linkFlags: []
对于所有关键字, 我们提供白名单过滤. 这样可以避免非法路径处理和访问编译上载文件夹之外的文件.
可以在这里添加指定平台的编译标志.
此标志仅在需要添加平台或者 Defold SDK 里的库时使用. 应用的扩展库是自动添加的, 不应在这里添加. 下面是从引擎中剔除 3D 物理的例子:
x86_64-linux:
context:
excludeLibs: ["physics","LinearMath","BulletDynamics","BulletCollision"]
excludeSymbols: []
libs: ["physics_2d"]
linkFlags: []
此标志用于剔除平台上下文已经预先定义的东西. 下面是从引擎中剔除 Facebook 扩展的例子 (注意 (.*)
是帮助去掉正确元素而使用的正则表达式).
armv7-android:
context:
excludeLibs: ["facebookext"]
excludeJars: ["(.*)/facebooksdk.jar","(.*)/facebook_android.jar"]
excludeSymbols: ["FacebookExt"]
libs: []
linkFlags: []
与其在这里列举我们不然努力把 manifest 的编辑功能加入编辑器, 让用户使用更方便.
与此同时, Manifestation 工具也会持续更新.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB