为Android编译

注意

在大多数情况下,使用内置的部署程序和导出模板就足够了。手工编译android apk对于部署人员的定制构建或定制包最为有用。

此外,您仍然需要遵循 为Android导出 尝试构建自定义导出模板之前的教程。

要求

要在Windows、Linux或MacOS下编译,需要执行以下操作:

  • Python 2.7+ or Python 3.5+

  • 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-sdkexport 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.apkandroid_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.stable3.1.dev )您还需要将这个相同的版本字符串写入 version.txt 文件位于导出模板旁边。

但是,如果您正在编写自定义模块或自定义C++代码,则可能需要将APK配置为自定义导出模板:

../../_images/andtemplates.png

您甚至不需要复制它们,只需在 bin\ godot源文件夹的目录,以便下次生成时自动引用自定义模板。

故障排除

未安装应用程序

Android可能会抱怨应用程序安装不正确。如果是这样:

  • 检查是否正确生成了调试密钥库。

  • 检查jarsigner可执行文件是否来自JDK 8。

如果仍然失败,打开命令行并运行 logcat

adb logcat

然后在安装应用程序时检查输出;错误消息应该显示在那里。如果你找不到帮助。

应用程序立即退出

如果应用程序运行但立即退出,这可能是由于以下原因之一:

  • 确保使用与编辑器版本匹配的导出模板;如果使用新的godot版本,则 have 更新模板。

  • libgodot_android.so 不在 libs/<android_arch>/ 在哪里? <android_arch> 是设备的体系结构。

  • 设备的架构与导出的架构不匹配。确保您的模板是为该设备的体系结构构建的,并且导出设置包括对该体系结构的支持。

无论如何, adb logcat 还应显示错误的原因。