---
title: Android 平台开发
brief: 本手册描述了如何在 Android 设备上构建和运行 Defold 应用程序
---
# Android 开发
Android 设备允许你自由运行自己的应用程序。构建游戏版本并将其复制到 Android 设备上非常容易。本手册解释了为 Android 打包游戏所涉及的步骤。在开发过程中,通过[开发应用](/manuals/dev-app)运行游戏通常是首选,因为它允许你直接将内容和代码热重载到设备上。
## Android 和 Google Play 签名流程
Android 要求所有 APK 在安装到设备上或更新之前都必须使用证书进行数字签名。如果你使用 Android App Bundles,只需在上传到 Play Console 之前对你的应用包进行签名,[Play App Signing](https://developer.android.com/studio/publish/app-signing#app-signing-google-play)会处理其余部分。但是,你也可以手动为应用签名,以便上传到 Google Play、其他应用商店以及在任何商店之外分发。
当你从 Defold 编辑器或[命令行工具](/manuals/bob)创建 Android 应用包时,你可以提供一个密钥库(包含你的证书和密钥)和密钥库密码,这些将在签名你的应用程序时使用。如果你不提供,Defold 会生成一个调试密钥库并在签名应用程序包时使用它。
::: important
你**绝对不应该**将使用调试密钥库签名的应用程序上传到 Google Play。始终使用你自己创建的专用密钥库。
:::
## 创建密钥库
::: sidenote
Defold 中的 Android 签名流程在版本 1.2.173 中发生了变化,从使用独立的密钥和证书改为使用密钥库。[更多信息请参阅此论坛帖子](https://forum.defold.com/t/upcoming-change-to-the-android-build-pipeline/66084)。
:::
你可以[使用 Android Studio](https://developer.android.com/studio/publish/app-signing#generate-key)或从终端/命令提示符创建密钥库:
```bash
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` 进行标识。
::: important
确保将密钥库和相关密码存储在安全的地方。如果你自己签名并将应用程序上传到 Google Play,而密钥库或密钥库密码丢失,你将无法在 Google Play 上更新应用程序。你可以通过使用 Google Play App Signing 并让 Google 为你签名应用程序来避免这种情况。
:::
## 创建 Android 应用包
编辑器允许你轻松地为游戏创建独立的应用包。在打包之前,你可以在 *game.project* [项目设置文件](/manuals/project-settings/#android) 中指定要使用的图标、设置版本代码等。
要从菜单中选择打包,请选择 Project ▸ Bundle... ▸ Android Application...。
如果你希望编辑器自动创建随机调试证书,请将 *Keystore* 和 *Keystore password* 字段留空:

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

Defold 支持创建 APK 和 AAB 文件。从 Bundle Format 下拉菜单中选择 APK 或 AAB。
配置好应用包设置后,按 Create Bundle。然后系统会提示你指定在计算机上创建包的位置。

:[Build Variants](../shared/build-variants.md)
### 安装 Android 应用包
#### 安装 APK
一个 *`.apk`* 文件可以使用 `adb` 工具复制到你的设备上,或者通过 [Google Play 开发者控制台](https://play.google.com/apps/publish/) 复制到 Google Play。
:[Android ADB](../shared/android-adb.md)
```
$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
pkg: /data/local/tmp/my_app.apk
Success
```
#### 使用编辑器安装 APK
你可以使用编辑器打包对话框中的"在连接的设备上安装"和"启动已安装的应用"复选框来安装和启动 *`.apk`* 文件:

要使此功能正常工作,你需要安装 ADB 并在连接的设备上启用 *USB 调试*。如果编辑器无法检测到 ADB 命令行工具的安装位置,你需要在[首选项](/manuals/editor-preferences/#tools)中指定它。
#### 安装 AAB
一个 *.aab* 文件可以通过 [Google Play 开发者控制台](https://play.google.com/apps/publish/) 上传到 Google Play。也可以使用 *.aab* 文件制作 *.apk* 以便使用 [`bundletool`](https://developer.android.com/studio/command-line/bundletool) 在本地安装。
## 权限
Defold 引擎需要许多不同的权限才能使所有引擎功能正常工作。权限在 `AndroidManifest.xml` 中定义,在 *game.project* [项目设置文件](/manuals/project-settings/#android) 中指定。你可以在[官方文档](https://developer.android.com/guide/topics/permissions/overview)中阅读更多关于 Android 权限的信息。默认清单中请求以下权限:
### android.permission.INTERNET 和 android.permission.ACCESS_NETWORK_STATE (保护级别: normal)
允许应用程序打开网络套接字并访问网络信息。这些权限是访问互联网所必需的。([Android 官方文档](https://developer.android.com/reference/android/Manifest.permission#INTERNET))和([Android 官方文档](https://developer.android.com/reference/android/Manifest.permission#ACCESS_NETWORK_STATE))。
### android.permission.WAKE_LOCK (保护级别: normal)
允许使用 PowerManager WakeLocks 来防止处理器休眠或屏幕变暗。在接收推送通知时暂时防止设备休眠需要此权限。([Android 官方文档](https://developer.android.com/reference/android/Manifest.permission#WAKE_LOCK))
## 使用 AndroidX
AndroidX 是对原始 Android 支持库重大改进,该支持库已不再维护。AndroidX 包通过提供功能对等和新库完全取代了支持库。[资源门户](/assets) 中的大多数 Android 扩展都支持 AndroidX。如果你不想使用 AndroidX,可以通过在[应用程序清单](https://defold.com/manuals/app-manifest/)中勾选 `Use Android Support Lib` 来明确禁用它,转而使用旧的 Android 支持库。

## 常见问题
:[Android 问答](../shared/android-faq.md)