Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Android 开发

Android 设备允许你自由运行自己的应用程序。构建游戏版本并将其复制到 Android 设备上非常容易。本手册解释了为 Android 打包游戏所涉及的步骤。在开发过程中,通过开发应用运行游戏通常是首选,因为它允许你直接将内容和代码热重载到设备上。

Android 和 Google Play 签名流程

Android 要求所有 APK 在安装到设备上或更新之前都必须使用证书进行数字签名。如果你使用 Android App Bundles,只需在上传到 Play Console 之前对你的应用包进行签名,Play App Signing会处理其余部分。但是,你也可以手动为应用签名,以便上传到 Google Play、其他应用商店以及在任何商店之外分发。

当你从 Defold 编辑器或命令行工具创建 Android 应用包时,你可以提供一个密钥库(包含你的证书和密钥)和密钥库密码,这些将在签名你的应用程序时使用。如果你不提供,Defold 会生成一个调试密钥库并在签名应用程序包时使用它。

绝对不应该将使用调试密钥库签名的应用程序上传到 Google Play。始终使用你自己创建的专用密钥库。

创建密钥库

Defold 中的 Android 签名流程在版本 1.2.173 中发生了变化,从使用独立的密钥和证书改为使用密钥库。更多信息请参阅此论坛帖子

你可以使用 Android Studio或从终端/命令提示符创建密钥库:

keytool -genkey -v -noprompt -dname "CN=John Smith, OU=Area 51, O=US Air Force, L=Unknown, ST=Nevada, C=US" -keystore mykeystore.keystore -storepass 5Up3r_53cR3t -alias myAlias -keyalg RSA -validity 9125

这将创建一个名为 mykeystore.keystore 的密钥库文件,其中包含一个密钥和证书。对密钥和证书的访问将受到密码 5Up3r_53cR3t 的保护。密钥和证书将在 25 年(9125 天)内有效。生成的密钥和证书将通过别名 myAlias 进行标识。

确保将密钥库和相关密码存储在安全的地方。如果你自己签名并将应用程序上传到 Google Play,而密钥库或密钥库密码丢失,你将无法在 Google Play 上更新应用程序。你可以通过使用 Google Play App Signing 并让 Google 为你签名应用程序来避免这种情况。

创建 Android 应用包

编辑器允许你轻松地为游戏创建独立的应用包。在打包之前,你可以在 game.project 项目设置文件 中指定要使用的图标、设置版本代码等。

要从菜单中选择打包,请选择 Project ▸ Bundle... ▸ Android Application...

如果你希望编辑器自动创建随机调试证书,请将 KeystoreKeystore password 字段留空:

Signing Android bundle

如果你想使用特定的密钥库为你的包签名,请指定 KeystoreKeystore passwordKeystore 预期具有 .keystore 文件扩展名,而密码预期存储在具有 .txt 扩展名的文本文件中。如果密钥库中的密钥使用与密钥库本身不同的密码,也可以指定 Key password

Signing Android bundle

Defold 支持创建 APK 和 AAB 文件。从 Bundle Format 下拉菜单中选择 APK 或 AAB。

配置好应用包设置后,按 Create Bundle。然后系统会提示你指定在计算机上创建包的位置。

Android Application Package file

构建变体

当您打包游戏时,需要选择希望使用的引擎类型。您有三个基本选项:

  • Debug
  • Release
  • Headless

这些不同版本也被称为 构建变体

当您选择 Project ▸ Build 时,您将始终获得调试版本。

Debug

这种类型的可执行文件通常在游戏开发过程中使用,因为它包含几个有用的调试功能:

  • 分析器 - 用于收集性能和使用计数器。了解如何使用分析器,请参阅分析器手册
  • 日志记录 - 启用日志记录时,引擎将记录系统信息、警告和错误。引擎还将输出来自 Lua print() 函数的日志,以及使用 dmLogInfo()dmLogError() 等的原生扩展日志记录。了解如何阅读这些日志,请参阅游戏和系统日志手册
  • 热重载 - 热重载是一个强大的功能,它允许开发者在游戏运行时重新加载资源。了解如何使用此功能,请参阅热重载手册
  • 引擎服务 - 可以通过多个不同的开放 TCP 端口和服务连接到游戏调试版本并与之交互。这些服务包括热重载功能、远程日志访问和上述分析器,还包括其他远程与引擎交互的服务。在开发者文档中了解有关引擎服务的更多信息。

Release

此变体禁用了调试功能。当游戏准备发布到应用商店或以其他方式与玩家共享时,应选择此选项。出于多种原因,不建议发布启用了调试功能的游戏:

  • 调试功能在二进制文件中占用一些空间,而尽量保持发布游戏的二进制文件大小尽可能小是一种最佳实践
  • 调试功能也会占用一些 CPU 时间。如果用户使用低端硬件,这可能会影响游戏性能。在手机上,增加的 CPU 使用量还会导致发热和电池消耗。
  • 调试功能可能会暴露游戏中不应让玩家看到的信息,无论从安全、作弊还是欺诈的角度来看。

Headless

此可执行文件在没有图形和声音的情况下运行。这意味着您可以在 CI 服务器上运行游戏的单元/冒烟测试,甚至可以将其作为云中的游戏服务器使用。

安装 Android 应用包

安装 APK

一个 .apk 文件可以使用 adb 工具复制到你的设备上,或者通过 Google Play 开发者控制台 复制到 Google Play。

adb 命令行工具是一个易于使用且功能多样的程序,用于与 Android 设备进行交互。您可以作为 Android SDK Platform-Tools 的一部分下载并安装 adb,适用于 Mac、Linux 或 Windows。

从以下地址下载 Android SDK Platform-Tools:https://developer.android.com/studio/releases/platform-tools。您可以在 /platform-tools/ 目录中找到 adb 工具。或者,也可以通过各平台相应的软件包管理器安装特定平台的软件包。

在 Ubuntu Linux 上:

$ sudo apt-get install android-tools-adb

在 Fedora 18/19 上:

$ sudo yum install android-tools

在 macOS (Homebrew) 上:

$ brew cask install android-platform-tools

您可以通过 USB 将 Android 设备连接到计算机,然后发出以下命令来验证 adb 是否正常工作:

$ adb devices
List of devices attached
31002535c90ef000    device

如果您的设备没有显示,请确认您已在 Android 设备上启用 USB 调试。打开设备的 设置 并查找 开发者选项(或 开发)。

Enable USB debugging

$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
  pkg: /data/local/tmp/my_app.apk
Success

使用编辑器安装 APK

你可以使用编辑器打包对话框中的”在连接的设备上安装”和”启动已安装的应用”复选框来安装和启动 .apk 文件:

Install and Launch APK

要使此功能正常工作,你需要安装 ADB 并在连接的设备上启用 USB 调试。如果编辑器无法检测到 ADB 命令行工具的安装位置,你需要在首选项中指定它。

安装 AAB

一个 .aab 文件可以通过 Google Play 开发者控制台 上传到 Google Play。也可以使用 .aab 文件制作 .apk 以便使用 bundletool 在本地安装。

权限

Defold 引擎需要许多不同的权限才能使所有引擎功能正常工作。权限在 AndroidManifest.xml 中定义,在 game.project 项目设置文件 中指定。你可以在官方文档中阅读更多关于 Android 权限的信息。默认清单中请求以下权限:

android.permission.INTERNET 和 android.permission.ACCESS_NETWORK_STATE (保护级别: normal)

允许应用程序打开网络套接字并访问网络信息。这些权限是访问互联网所必需的。(Android 官方文档)和(Android 官方文档)。

android.permission.WAKE_LOCK (保护级别: normal)

允许使用 PowerManager WakeLocks 来防止处理器休眠或屏幕变暗。在接收推送通知时暂时防止设备休眠需要此权限。(Android 官方文档

使用 AndroidX

AndroidX 是对原始 Android 支持库重大改进,该支持库已不再维护。AndroidX 包通过提供功能对等和新库完全取代了支持库。资源门户 中的大多数 Android 扩展都支持 AndroidX。如果你不想使用 AndroidX,可以通过在应用程序清单中勾选 Use Android Support Lib 来明确禁用它,转而使用旧的 Android 支持库。

常见问题

Q: 是否可以在 Android 上隐藏导航栏和状态栏?

A: 是的,在您的 game.project 文件的 Android 部分设置 immersive_mode 选项。这可以让您的应用程序占据整个屏幕并捕获屏幕上的所有触摸事件。

Q: 在设备上安装 Defold 游戏时,为什么会出现 “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” 错误?

A: Android 检测到您尝试使用新证书安装应用程序。打包调试版本时,每个版本都将使用临时证书签名。在安装新版本之前,请卸载旧的应用程序:

$ adb uninstall com.defold.examples
Success
$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
      pkg: /data/local/tmp/Defold examples.apk
Success

Q: 为什么在使用某些扩展构建时,会出现关于 AndroidManifest.xml 中属性冲突的错误?

A: 当两个或多个扩展提供包含相同属性标签但值不同的 Android Manifest 存根时,可能会发生这种情况。例如,Firebase 和 AdMob 就曾发生过这种情况。构建错误类似于以下内容:

SEVERE: /tmp/job4531953598647135356/upload/AndroidManifest.xml:32:13-58
Error: Attribute property#android.adservices.AD_SERVICES_CONFIG@resource
value=(@xml/ga_ad_services_config) from AndroidManifest.xml:32:13-58 is also
present at AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
Suggestion: add 'tools:replace="android:resource"' to <property> element at
AndroidManifest.xml to override. 

您可以在报告的 Defold 问题 #9453 和 Google 问题 #327696048 中阅读有关此问题和解决方法的更多信息。