为 Android 平台编译
注意
对于大多数情况, 使用内置部署程序和导出模板就足够了. 手动编译Android APK对于部署程序的自定义版本或自定义程序包最有用. 为 Android 导出 教程中提到的步骤进行操作.
需求
要在Windows, Linux或macOS下进行编译, 需要以下内容:
- Python 3.5+.
- SCons 3.0+ 构建系统.
Android SDK (命令行工具就足够了).
所需的SDK组件将被自动安装.
- 不要使用发行版存储库提供的Android SDK, 因为它通常会过时 .
- Gradle(如果缺少, 将自动下载并安装).
JDK 11(OpenJDK 或 Oracle JDK)。
ojdkbuild 下载一个版本. 参见 构建系统介绍。
设置构建系统
ANDROID_SDK_ROOT指向 Android SDK. 如果你下载了Android命令行工具, 这将是您提取ZIP存档内容的文件夹.- 在此文件夹中安装必要的SDK组件:
android_sdk_path是android SDK的路径, 然后用y回答所有提示:
tools/bin/sdkmanager --sdk_root=<android_sdk_path> --licenses
android_sdk_path是Android SDK的路径.
tools/bin/sdkmanager --sdk_root=<android_sdk_path> "platform-tools" "build-tools;30.0.3" "platforms;android-29" "cmdline-tools;latest" "cmake;3.10.2.4988404"
参见
Advanced system settings , 然后在出现的窗口中点击 Environment .
参见
export ANDROID_SDK_ROOT=/path/to/android-sdk , 其中 /path/to/android-sdk 指向SDK目录的根目录.
构建导出模板
android_release.apk)和调试模板(android_debug.apk). 由于Google将要求所有APK从2019年8月开始包含ARMv8(64位)库, 因此以下命令将构建包含ARMv7和ARMv8库的APK.
编译标准导出模板的方法是在Godot根目录下调用SCons, 参数如下:
-
scons platform=android target=release android_arch=armv7scons platform=android target=release android_arch=arm64v8cd platform/android/java# On Windows.\gradlew generateGodotTemplates# On Linux and macOS./gradlew generateGodotTemplates
bin/android_release.apk.
-
scons platform=android target=release_debug android_arch=armv7scons platform=android target=release_debug android_arch=arm64v8cd platform/android/java# On Windows.\gradlew generateGodotTemplates# On Linux and macOS./gradlew generateGodotTemplates
bin/android_debug.apk.
添加对x86设备的支持
android_arch=x86 和 android_arch=x86_64 参数第三次和第四次运行SCons命令. 例如, 对于发布模板:
scons platform=android target=release android_arch=armv7scons platform=android target=release android_arch=arm64v8scons platform=android target=release android_arch=x86scons platform=android target=release android_arch=x86_64cd platform/android/java# On Windows.\gradlew generateGodotTemplates# On Linux and macOS./gradlew generateGodotTemplates
这将创建一个适用于所有平台的胖二进制文件. 导出项目的最终APK大小取决于您在导出时选择支持的平台;换句话说, 未使用的平台将从APK中删除.
清理生成的导出模板
您可以使用以下命令删除生成的导出模板:
cd platform/android/java# On Windows.\gradlew cleanGodotTemplates# On Linux and macOS./gradlew cleanGodotTemplates
使用导出模板
作为Android的导出模板,Godot需根据与编辑器相同的版本/提交编译发布版和调试版APK. 如果您使用官方二进制文件作为编辑器, 请确保安装匹配的导出模板, 或者从相同版本构建自己的模板. 导出游戏时,Godot将打开APK, 更改其中的一些内容并添加文件.
安装模板
android_debug.apk 和 android_release.apk)必须使用各自的名称复制到Godot的模板文件夹中. 模板文件夹可以位于:
%APPDATA%\Godot\templates\<version>\$HOME/.local/share/godot/templates/<version>/$HOME/Library/Application Support/Godot/templates/<version>/<version>的格式为major.minor[.patch].status, 使用Godot源代码库中version.py的值(例如3.0.5.stable或3.1.dev). 您还需要将此相同的版本字符串写入到导出模板旁边的version.txt文件中. 但是, 如果要编写自定义模块或自定义C++代码, 则可能需要在此处将APK配置为自定义导出模板:bin\目录中生成的文件, 因此下次构建时, 将自动引用自定义模板.故障排除
平台不在SCons中出现
ANDROID_SDK_ROOT环境变量. 这是使平台出现在SCons检测到的平台列表中的必要条件. 参见 Setting up the buildsystem 获得更多信息.应用程序未安装
Android可能会抱怨该应用程序未正确安装. 如果是这样的话:- 检查是否正确生成了调试密钥库.
- 检查jarsigner可执行文件是否来自JDK 8.
logcat:
然后在安装应用程序时检查输出;错误消息应该在此处显示. 如果无法解决, 请寻求帮助.adb logcat
应用程序秒退
如果应用程序运行但秒退, 则可能是以下原因之一: - 必须 更新模板.
libgodot_android.so不在libs/<android_arch>/中, 其中<android_arch>是设备的架构.- 设备的体系结构与导出的体系结构不匹配. 确保您的模板是针对该设备的体系结构构建的, 并且导出设置包括对该体系结构的支持.
adb logcat也应显示错误原因.
