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

Бандлинг приложения

При разработке приложения вы должны выработать привычку как можно чаще тестировать игру на целевых платформах. Это необходимо для того, чтобы выявлять проблемы с производительностью на ранних этапах процесса разработки, когда эти проблемы гораздо легче исправить. Также рекомендуется тестировать на всех целевых платформах, чтобы найти расхождения в таких вещах, как шейдеры. При разработке на мобильных устройствах у вас есть возможность использовать приложение для мобильной разработки для отправки содержимого в приложение вместо того, чтобы выполнять полную пересборку и цикл удаления/установки.

Вы можете создать бандл приложения для всех платформ, которые поддерживает Defold, из самого редактора Defold без каких-либо внешних инструментов. Вы также можете сделать бандл из командной строки с помощью наших инструментов командной строки. Бандлинг приложения требует сетевое соединение, если ваш проект содержит одно или несколько нативных расширений.

Бандлинг прямо из редактора

Создать бандл можно из меню Project и опции Bundle:

Выбор любого из пунктов меню вызовет диалог Бандла для этой конкретной платформы.

Отчеты о сборке

При сборке вашей игры есть возможность создать отчет о сборке. Это очень полезно, чтобы получить представление о размере всех ассетов, входящих в бандл. Просто установите флажок Generate build report при сборке игры.

build report

Чтобы узнать больше об отчетах о сборке, обратитесь к Руководству по профилированию.

Android

Создание бандла для Android (файл .apk) описано в Руководстве по Android.

iOS

Создание бандла для iOS (файл .ipa) описано в Руководстве по iOS.

macOS

Создание бандла для macOS (файл .app) описано в Руководстве по macOS.

Linux

Создание бандла для Linux не требует специальной настройки и дополнительной конфигурации для конкретной платформы в [файле настроек проекта]project settings file game.project.

Windows

Создание Windows-приложения (файл .exe) описано в Руководстве по Windows.

HTML5

Создание HTML5 билда, а также дополнительная настройка описаны в руководстве по HTML5.

Facebook Instant Games

Можно создать специальную версию HTML5 билда специально для Facebook Instant Games. Этот процесс задокументирован в руководстве по Facebook Instant Games.

Бандлинг из командной строки

При повседневной разработке вашего приложения вполне вероятно, что вы собираете и бандлите прямо из редактора Defold. В других обстоятельствах вы можете захотеть автоматически создавать бандлы, например, пакетный бандлинг для всех платформ при выпуске новой версии или при создании ночных сборок последней версии игры, возможно, в среде CI. Сборка и бандлинг приложения могут выполняться вне обычного рабочего процесса в редакторе, с помощью инструмента командной строки Bob.

Редактор использует наш инструмент командной строки Bob для создания бандла приложения.

Структура бандла

Логическая структура бандла выглядит следующим образом:

Бандл создаётся в папке. В зависимости от платформы эта папка может быть заархивирована в .apk или .ipa. Содержимое папки зависит от платформы.

Помимо исполняемых файлов, наш процесс бандлинга также собирает необходимые ассеты для платформы (например, .xml файлы ресурсов для Android).

Используя настройку bundle_resources, вы можете указать ассеты, которые должны быть помещены в бандл как есть. Этим можно управлять для каждой платформы отдельно.

Игровые ассеты находятся в файле game.arcd, и каждый из них сжимается с использованием LZ4-сжатия. Используя настройку custom_resources, вы можете указать ассеты, которые должны быть помещены (с сжатием) в game.arcd. Эти ассеты можно загрузить с помощью функции sys.load_resource().

Релиз или Отладка

При создании бандла приложения у вас есть возможность создать отладочную или релизную сборку. Различия между этими типами сборок незначительные, но важные:

  • Релизные сборки не содержат профайлер
  • Релизные сборки не содержат запись экрана
  • Релизные сборки не показывают вывод вызовов print() и вывод из нативных расширений
  • В релизных сборках значение is_debug в sys.get_engine_info() установлено в false
  • Релизные сборки не выполняют обратный поиск значений hash при вызове tostring(). На практике это означает, что результат tostring() для значений типа url или hash будет числовым, а не исходной строкой ('hash: [/camera_001]' vs 'hash: [11844936738040519888 (unknown)]')
  • Релизные сборки не поддерживают таргетинг из редактора для горячей перезагрузки и аналогичной функциональности