为Android编译¶
注意¶
在大多数情况下,使用内置的部署程序和导出模板就足够了。手工编译android apk对于部署人员的定制构建或定制包最为有用。
此外,您仍然需要遵循 为Android导出 尝试构建自定义导出模板之前的教程。
要求¶
要在Windows、Linux或MacOS下编译,需要执行以下操作:
SCons 构建系统
Android SDK (命令行工具就足够了)
所需的SDK组件将由Gradle自动安装(NDK除外)
Android NDK R17或更高版本
Gradle(如果丢失,将自动下载和安装)
JDK 8(OpenJDK或Oracle JDK)
当前不支持JDK 9或更高版本
您可以从下载生成 ojdkbuild
参见
有关godot的scons用法的概述,请参阅 建筑系统简介 .
建立建筑系统¶
设置环境变量 ANDROID_HOME
指向Android SDK。如果您下载了android命令行工具,那么这个文件夹就是您提取zip归档文件内容的文件夹。后来, gradlew
将在此文件夹中安装必要的SDK组件。但是,在Gradle下载之前,您需要接受SDK组件许可证。这可以通过从sdk目录的根目录运行以下命令来完成,然后用 y
:
tools/bin/sdkmanager --licenses
设置环境变量 ANDROID_NDK_ROOT
指向Android NDK。您可能还需要设置变量 ANDROID_NDK_HOME
同样的路径,特别是如果您使用的是定制的Android模块,因为有些Gradle插件依赖于ndk并使用这个变量来确定其位置。
要在Windows上设置这些环境变量,请按 窗口+R ,键入“控制系统”,然后单击 高级系统设置 在左窗格中,然后单击 环境变量 在出现的窗口上。
要在Linux或MacOS上设置这些环境变量,请使用 export ANDROID_HOME=/path/to/android-sdk
和 export ANDROID_NDK_ROOT=/path/to/android-ndk
在哪里? /path/to/android-sdk
和 /path/to/android-ndk
指向sdk和ndk目录的根目录。
构建导出模板¶
Godot需要两个Android导出模板:优化的“发布”模板 (android_release.apk
)和调试模板 (android_debug.apk
)由于Google将要求所有apk从2019年8月开始包含armv8(64位)库,下面的命令将构建包含armv7和armv8库的apk。
编译标准导出模板是通过使用以下参数调用scon来完成的:
发布模板(与导出时使用 已启用调试 未选中)
scons platform=android target=release android_arch=armv7
scons platform=android target=release android_arch=arm64v8
cd platform/android/java
# On Windows
.\gradlew build
# On Linux and macOS
./gradlew build
产生的APK将位于 bin/android_release.apk
.
调试模板(与导出时使用 已启用调试 已检查)
scons platform=android target=release_debug android_arch=armv7
scons platform=android target=release_debug android_arch=arm64v8
cd platform/android/java
# On Windows
.\gradlew build
# On Linux and macOS
./gradlew build
产生的APK将位于 bin/android_debug.apk
.
添加对x86设备的支持¶
如果还希望包括对x86设备的支持,请使用 android_arch=x86
在使用Gradle构建APK之前的参数。例如,对于发布模板:
scons platform=android target=release android_arch=armv7
scons platform=android target=release android_arch=arm64v8
scons platform=android target=release android_arch=x86
cd platform/android/java
# On Windows
.\gradlew build
# On Linux and macOS
./gradlew build
这将创建一个在所有平台上工作的胖二进制文件。导出项目的最终apk大小将取决于导出时选择支持的平台;换句话说,未使用的平台将从apk中删除。
使用导出模板¶
godot需要发布和调试apk,这些apk是根据与编辑器相同的版本/提交编译的。如果您使用的是编辑器的官方二进制文件,请确保安装匹配的导出模板,或者使用相同的版本构建自己的导出模板。
导出游戏时,godot会打开apk,在其中更改一些内容并添加文件。
安装模板¶
新编译的模板 (android_debug.apk
和 android_release.apk
)必须用各自的名称复制到Godot的模板文件夹中。模板文件夹可以位于:
窗户:
%APPDATA%\Godot\templates\<version>\
Linux:
$HOME/.local/share/godot/templates/<version>/
马科斯:
$HOME/Library/Application Support/Godot/templates/<version>/
<version>
是形式 major.minor[.patch].status
使用来自的值 version.py
在您的godot源存储库中(例如 3.0.5.stable
或 3.1.dev
)您还需要将这个相同的版本字符串写入 version.txt
文件位于导出模板旁边。
但是,如果您正在编写自定义模块或自定义C++代码,则可能需要将APK配置为自定义导出模板:
您甚至不需要复制它们,只需在 bin\
godot源文件夹的目录,以便下次生成时自动引用自定义模板。
故障排除¶
未安装应用程序¶
Android可能会抱怨应用程序安装不正确。如果是这样:
检查是否正确生成了调试密钥库。
检查jarsigner可执行文件是否来自JDK 8。
如果仍然失败,打开命令行并运行 logcat :
adb logcat
然后在安装应用程序时检查输出;错误消息应该显示在那里。如果你找不到帮助。
应用程序立即退出¶
如果应用程序运行但立即退出,这可能是由于以下原因之一:
确保使用与编辑器版本匹配的导出模板;如果使用新的godot版本,则 have 更新模板。
libgodot_android.so
不在libs/<android_arch>/
在哪里?<android_arch>
是设备的体系结构。设备的架构与导出的架构不匹配。确保您的模板是为该设备的体系结构构建的,并且导出设置包括对该体系结构的支持。
无论如何, adb logcat
还应显示错误的原因。