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. В процессе разработки рекомендуется запускать игру через development app, так как оно позволяет осуществлять горячую перезагрузку контента и кода по беспроводной связи прямо на устройство.

Android и процесс подписания Google Play

Android требует, чтобы все APK были подписаны цифровым сертификатом перед установкой на устройство или обновлением. Если вы используете Android App Bundles, вам нужно подписать только ваш пакет приложений перед загрузкой в Play Console, а Play App Signing позаботится обо всем остальном. Однако вы также можете вручную подписать свое приложение для загрузки в Google Play, других магазинов приложений и для распространения вне магазинов.

При создании пакета Android-приложений в редакторе Defold или с помощью инструмента командной строки, вы можете указать файл keystore (содержащий ваш сертификат и ключ) и пароль keystore, который будет использоваться при подписании вашего приложения. Если вы этого не сделаете, Defold создаст отладочное keystore и будет использовать его при подписании пакета приложений.

Вы никогда не загружайте свое приложение в Google Play, если оно было подписано с использованием отладочного хранилища ключей. Всегда используйте специальное хранилище ключей, которое вы создали сами.

Создание хранилища ключей

Процесс подписи Android в Defold изменился в версии 1.2.173 с использования отдельного ключа и сертификата на keystore. Дополнительная информация в сообщении форума.

Вы можете создать хранилище ключей с помощью 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

В результате будет создан файл keystore с именем mykeystore.keystore, содержащий ключ и сертификат. Доступ к ключу и сертификату будет защищен паролем 5Up3r_53cR3t. Ключ и сертификат будут действительны в течение 25 лет (9125 дней). Сгенерированные ключ и сертификат будут идентифицированы псевдонимом myAlias.

Обязательно храните хранилище ключей и связанный с ним пароль в безопасном месте. Если вы подписываете и загружаете свои приложения в Google Play самостоятельно, а keystore или пароль keystore утерян, вы не сможете обновить приложение в Google Play. Вы можете избежать этого, используя Google Play App Signing и позволяя Google подписывать ваши приложения за вас.

Создание пакета приложений для Android

Редактор позволяет легко создать отдельный пакет приложений для вашей игры. Перед созданием пакета вы можете указать, какую иконку (иконки) использовать для приложения, установить код версии и т.д. в game.project файл настроек проекта.

Для создания пакета выберите в меню Project ▸ Bundle... ▸ Android Application....

Если вы хотите, чтобы редактор автоматически создавал случайные отладочные сертификаты, оставьте поля Keystore и Keystore password пустыми:

Подписание пакета Android

Если вы хотите подписать свой пакет определенным хранилищем ключей, укажите Keystore и Keystore password. Ожидается, что Keystore будет иметь расширение файла .keystore, а пароль будет храниться в текстовом файле с расширением .txt. Также можно указать Key password, если ключ в хранилище использует пароль, отличный от самого keystore:

Подписание пакета Android

Defold поддерживает создание файлов APK и AAB. Выберите APK или AAB из выпадающего списка Bundle Format.

Нажмите Create Bundle, когда вы настроите параметры пакета приложений. Затем вам будет предложено указать, где на вашем компьютере будет создан пакет.

Файл пакета приложения Android

Варианты сборки

Когда вы собираете игру, нужно выбрать тип движка, который будет использоваться. Есть три основных варианта:

  • Debug
  • Release
  • Headless

Эти разные версии также называются Build variants

Если вы выбираете Project ▸ Build, вы всегда получите debug-версию.

Debug

Этот тип исполняемого файла обычно используется во время разработки игры, поскольку в него включены полезные возможности отладки:

  • Profiler - Используется для сбора счётчиков производительности и использования. Как пользоваться профилировщиком, описано в руководстве по профилированию.
  • Logging - Движок будет выводить системную информацию, предупреждения и ошибки, если логирование включено. Движок также будет выводить логи из Lua-функции print() и из логирования нативных расширений через dmLogInfo(), dmLogError() и так далее. Как читать эти логи, описано в руководстве по логам игры и системы.
  • Hot reload - Hot-reload — мощная возможность, позволяющая разработчику перезагружать ресурсы во время работы игры. О том, как этим пользоваться, написано в руководстве по Hot-Reload.
  • Engine services - К debug-версии игры можно подключаться и взаимодействовать с ней через несколько открытых TCP-портов и сервисов. Эти сервисы включают hot-reload, удалённый доступ к логам и упомянутый выше profiler, а также другие способы удалённого взаимодействия с движком. Подробнее об engine services читайте в документации для разработчиков.

Release

В этом варианте функции отладки отключены. Этот вариант следует выбирать, когда игра готова к публикации в магазине приложений или к распространению среди игроков другим способом. Выпускать игру с включёнными средствами отладки не рекомендуется по нескольким причинам:

  • Функции отладки немного увеличивают размер бинарника, а считается хорошей практикой стараться держать размер релизного бинарника как можно меньше.
  • Функции отладки также потребляют немного процессорного времени. Это может повлиять на производительность игры на слабом оборудовании. На мобильных телефонах повышенная нагрузка на CPU также приводит к нагреву и расходу батареи.
  • Функции отладки могут раскрывать информацию об игре, которую не предполагается показывать игрокам, в том числе с точки зрения безопасности, читерства или мошенничества.

Headless

Этот исполняемый файл запускается без графики и звука. Это означает, что вы можете выполнять unit/smoke tests игры на CI-сервере или даже использовать его как игровой сервер в облаке.

Установка пакета приложений для Android

Установка APK

Файл .apk можно скопировать на устройство с помощью инструмента adb или загрузить в Google Play через консоль разработчика Google Play (см. ниже).

Инструмент командной строки adb — это удобная и универсальная программа для взаимодействия с устройствами Android. Вы можете скачать и установить adb как часть Android SDK Platform-Tools для Mac, Linux или Windows.

Скачать Android SDK Platform-Tools можно здесь: https://developer.android.com/studio/releases/platform-tools. Инструмент adb находится в каталоге /platform-tools/. Также можно установить платформенные пакеты через соответствующие менеджеры пакетов.

В 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

Проверить, что adb работает, можно так: подключите Android-устройство к компьютеру по USB и выполните следующую команду:

$ adb devices
List of devices attached
31002535c90ef000    device

Если устройство не появляется в списке, убедитесь, что на Android-устройстве включена USB debugging. Откройте Settings устройства и найдите Developer options (или Development).

Enable USB debugging

$ adb install Defold\ examples.apk
4826 КБ/с (18774344 байта за 3,798 с)
  pkg: /data/local/tmp/my_app.apk
Success

Установка APK с использованием редактора

Вы можете установить и запустить файл .apk, используя опции редактора “Install on connected device” и “Launch installed app” в диалоговом окне создания пакета:

Установка и запуск APK

Для работы этой функции необходимо, чтобы ADB был установлен, а на подключенном устройстве была включена USB-отладка. Если редактор не может определить расположение команды ADB, необходимо указать путь к ADB в разделе Preferences.

Установка AAB

Файл .aab можно загрузить в Google Play через консоль разработчика Google Play. Также можно сгенерировать .apk файл из .aab файла для локальной установки с помощью Android bundletool.

Разрешения

Движок Defold требует ряд различных разрешений для работы всех функций движка. Разрешения определяются в AndroidManifest.xml, указанном в game.project файл настроек проекта. Подробнее о разрешениях Android можно прочитать в официальных документах. В манифесте по умолчанию запрашиваются следующие разрешения:

android.permission.INTERNET и android.permission.ACCESS_NETWORK_STATE (Уровень защиты: нормальный)

Позволяет приложениям открывать сетевые сокеты и получать доступ к информации о сетях. Эти разрешения необходимы для доступа в Интернет. (Android official docs) и (Android official docs).

android.permission.WAKE_LOCK (Уровень защиты: нормальный)

Позволяет использовать блокировку PowerManager WakeLocks для предотвращения засыпания процессора или затемнения экрана. Это разрешение необходимо для временного предотвращения засыпания устройства при получении push-уведомления. (Официальные документы Android)

Использование AndroidX

AndroidX — это значительное улучшение по сравнению с оригинальной Android Support Library, которая больше не поддерживается. Пакеты AndroidX полностью заменяют библиотеку поддержки, обеспечивая тот же функционал и предлагая новые библиотеки. Большинство Android-расширений на портале ассетов поддерживают AndroidX. Если вы не хотите использовать AndroidX, вы можете явно отключить его в пользу старой библиотеки поддержки Android, установив флажок Use Android Support Lib в манифесте приложения.

FAQ

Q: Можно ли скрыть панели навигации и статуса на Android?

A: Да, установите параметр immersive_mode в разделе Android вашего файла game.project. Это позволит приложению использовать весь экран и получать все касания по экрану.

Q: Почему при установке игры Defold на устройство я получаю ошибку “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”?

A: Android обнаружил, что вы пытаетесь установить приложение с новым сертификатом. При сборке debug-версий каждая сборка подписывается временным сертификатом. Удалите старую версию приложения перед установкой новой:

$ 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. 

Подробнее об этой проблеме и обходном решении можно прочитать в issue Defold #9453 и issue Google #327696048.