Отладка процесса сборки, установки и запуска игры

Введение

Ниже представлено руководство по отладке процесса компиляции и сборки игр Unity с использованием Firebase SDK для Unity. В нём описывается, как исследовать и решать многие из наиболее распространённых проблем, которые могут возникнуть при настройке и сборке игры для новой платформы или после обновления. Руководство расположено в порядке возникновения этих ошибок. Ознакомьтесь с ними по порядку и действуйте по мере устранения каждой ошибки.

В дополнение к этому документу, для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами по Firebase для Unity .

Проблемы компиляции Play Mode

Первый класс проблем сборки может возникнуть при тестировании в редакторе перед запуском мобильной сборки. В этом разделе рассматриваются все ошибки Firebase, возникающие до и во время режима воспроизведения.

При запуске Unity или обнаружении изменений в зависимостях, коде или других ресурсах, она попытается пересобрать проект. Если проект не скомпилируется в этот момент, редактор выведет ошибки компиляции в консоль, а при попытке перейти в режим воспроизведения на вкладке «Сцена» Unity появится всплывающее окно с сообщением: All compiler errors have to be fixed before you can enter playmode! .

Отсутствующие типы, классы, методы и члены

Многие проблемы Firebase возникают из-за того, что редактор и компилятор не могут найти необходимые типы, классы, методы и элементы. Типичные симптомы:

The type or namespace name '<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace 'Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

'<CLASS NAME>' does not contain a definition for '<MEMBER VARIABLE OR METHOD NAME>'

Шаги решения:
  1. Если вы используете классы или методы Firebase в коде, убедитесь, что вы делаете их доступными, используя правильные директивы using для конкретных необходимых продуктов Firebase.

    1. Примеры из MechaHamster: Level Up With Firebase Edition :
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. Убедитесь, что вы импортировали соответствующие пакеты Firebase:

    1. Чтобы импортировать соответствующие пакеты:
      1. Добавьте Firebase Unity SDK как .unitypackage или
      2. Изучите и выполните одну из альтернатив в разделе Дополнительные варианты установки Unity .
    2. Убедитесь, что каждый продукт Firebase в вашем проекте и EDM4U :
      • Находятся в одной и той же версии
      • Были установлены либо исключительно как .unitypackage , либо исключительно через менеджер пакетов Unity.
  3. Если вы импортировали Firebase Unity SDK версии ниже 10.0.0 как .unitypackage , ZIP-архив Firebase Unity SDK содержит пакеты для поддержки как .NET 3.x, так и .NET 4.x. Убедитесь, что в ваш проект включена только совместимая версия .NET Framework:

    1. Совместимость между версиями редактора Unity и уровнями .NET Frameworks обсуждается в разделе Добавление Firebase в ваш проект Unity .
    2. Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно переключиться с использования .unitypackage на один из дополнительных вариантов установки Unity , самый простой способ — удалить все пакеты Firebase с помощью методов, упомянутых в этом разделе миграции , а затем повторно импортировать все пакеты Firebase.
  4. Убедитесь, что ваш редактор перестраивает ваш проект и что ваши попытки воспроизведения отражают наиболее актуальное состояние вашего проекта:

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

Ошибки выполнения режима воспроизведения

Если ваша игра запускается, но во время работы возникают проблемы с Firebase, попробуйте сделать следующее:

Убедитесь, что вы одобряете пакеты Firebase в разделе «Безопасность и конфиденциальность» на Mac OS.

Если при запуске игры в редакторе на Mac OS появляется диалоговое окно с сообщением «FirebaseCppApp-<версия>.bundle Невозможно открыть, так как не удалось проверить разработчика.», вам необходимо одобрить этот конкретный файл пакета в меню «Безопасность и конфиденциальность» на Mac.

Для этого нажмите значок Apple > «Системные настройки» > «Безопасность и конфиденциальность».

В меню безопасности, примерно в середине страницы, есть раздел, в котором говорится: «Использование файла «FirebaseCppApp-<версия>.bundle» было заблокировано, так как он принадлежит неустановленному разработчику».

Нажмите кнопку Разрешить в любом случае .

c35166e224cce720.png

Вернитесь в Unity и снова нажмите Play .

Затем вы увидите предупреждение, похожее на первое:

5ad9ddb0d3a52892.png

Нажмите кнопку «Открыть» , и ваша программа сможет продолжить работу; больше вам не придется спрашивать об этом конкретном файле.

Убедитесь, что ваш проект содержит и использует действительные файлы конфигурации.

  1. Убедитесь, что настройки сборки соответствуют целевой платформе (iOS или Android) в меню «Файл» > «Настройки сборки» . Более подробную информацию см. в документации по настройкам сборки Unity .
  2. Загрузите файл конфигурации для своего приложения ( google-services.json для Android или GoogleService-Info.plist для iOS) и соберите целевой объект из консоли Firebase в разделе «Настройки проекта» > «Ваши приложения» . Если у вас уже есть эти файлы, удалите их в своем проекте и замените их самой последней версией, убедившись, что они написаны точно так, как указано выше, без «(1)» или других цифр, прикрепленных к именам файлов.
  3. Если консоль содержит сообщение о файлах в Assets/StreamingAssets/ , убедитесь, что нет сообщений о том, что Unity не удалось редактировать файлы в этом месте.
  4. Убедитесь, что Assets/StreamingAssets/google-services-desktop.json сгенерирован и соответствует загруженному файлу конфигурации.
    • Если он не создается автоматически и StreamingAssets/ не существует, вручную создайте каталог в каталоге Assets .
    • Проверьте, сгенерировал ли Unity файл google-services-desktop.json .

Убедитесь, что все продукты Firebase и EDM4U установлены исключительно через .unitypackage или Unity Package Manager.

  1. Проверьте папку Assets/ и диспетчер пакетов Unity, чтобы убедиться, что Firebase SDK и EDM4U были установлены исключительно одним или другим методом.
  2. Некоторые плагины, разработанные Google , например, из Google Play, а также сторонние плагины могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои .unitypackage или пакеты Unity Package Manager (UPM). Убедитесь, что в вашем проекте есть только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего сохранить только версии EDM4U для UPM, которые можно найти на странице архива API Google для Unity .

Убедитесь, что все продукты Firebase в вашем проекте имеют одинаковую версию.

  1. Если Firebase SDK были установлены через .unitypackage , проверьте, все ли библиотеки FirebaseCppApp в Assets/Firebase/Plugins/x86_64/ имеют одинаковую версию.
  2. Если пакеты Firebase SDK были установлены через диспетчер пакетов Unity (UPM), откройте Windows > Диспетчер пакетов , найдите «Firebase» и убедитесь, что все пакеты Firebase имеют одинаковую версию.
  3. Если ваш проект содержит разные версии Firebase SDK, рекомендуем полностью удалить все Firebase SDK перед повторной установкой всех Firebase SDK, на этот раз с теми же версиями. Самый простой способ — удалить все пакеты Firebase, используя методы, описанные в этом разделе о миграции .

Ошибки сборки преобразователя и целевого устройства

Если ваша игра работает в редакторе (настроенном для соответствующей выбранной вами целевой сборки), затем проверьте, что внешний менеджер зависимостей для Unity (EDM4U) правильно настроен и функционирует.

Репозиторий EDM4U на GitHub содержит пошаговое руководство для этой части процесса, которое следует изучить и соблюдать перед продолжением работы.

Проблемы и минификация «Single Dex» ( обязательно при использовании Cloud Firestore)

При сборке приложения для Android вы можете столкнуться с ошибкой сборки, связанной с наличием одного dex-файла. Сообщение об ошибке выглядит примерно так (если ваш проект настроен на использование системы сборки Gradle):

Cannot fit requested classes in a single dex file.

Файлы .dex используются для хранения набора определений классов и связанных с ними дополнительных данных для приложений Android. Один файл .dex может содержать не более 65 536 ссылок на методы; сборка завершится ошибкой, если общее количество методов во всех библиотеках Android в вашем проекте превысит это ограничение.

Следующие два шага можно применять последовательно; включайте multidex только в том случае, если минификация не решает проблему.

Включить минификацию

В Unity появилась функция минификации в версии 2017.2, которая позволяет удалить неиспользуемый код и сократить общее количество методов, на которые ссылаются, в одном dex-файле. * Эту функцию можно найти в разделе «Настройки проигрывателя» > «Android» > «Настройки публикации» > «Минификация» . * Параметры могут различаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity.

Включить Мультидекс

Если после включения минификации количество используемых методов всё ещё превышает лимит, можно включить multidex . В Unity это можно сделать несколькими способами:

  • Если в настройках проигрывателя включен шаблон Custom Gradle , измените mainTemplate.gradle .
  • Если вы используете Android Studio для сборки экспортированного проекта, измените файл build.gradle на уровне модуля.

Более подробную информацию можно найти в руководстве пользователя Multidex .

Понимание и исправление ошибок выполнения целевого устройства

Если ваша игра работает в редакторе и может быть собрана и установлена на целевом устройстве, но вы столкнулись с ошибками во время выполнения, проверьте и изучите журналы, созданные на устройстве .

В этом разделе подробно описывается, как исследовать журналы на предмет возможных ошибок, а также одна такая ошибка, которая возникает только во время выполнения на устройстве или симуляторе.

Андроид

Симулятор

  • Проверьте журналы, отображаемые в консоли эмулятора, или просмотрите окно Logcat .

Устройство

Ознакомьтесь с adb и adb logcat и как их использовать.

  • Хотя вы можете использовать различные инструменты среды командной строки для фильтрации выходных данных, рассмотрите в качестве альтернативы рассмотрение опций logcat.
  • Простой способ начать сеанс ADB с чистого листа:

    adb logcat -c && adb logcat <OPTIONS>

    где OPTIONS — это флаги, которые вы передаете в командную строку для фильтрации вывода.

Использование Logcat через Android Studio

При использовании Logcat через Android Studio доступны дополнительные инструменты поиска , которые упрощают создание продуктивных поисковых запросов.

iOS

Проверка журналов

Если используется физическое устройство, подключите его к компьютеру. Проверьте lldb в Xcode.

Быстрые проблемы

Если вы обнаружите журналы ошибок, в которых упоминается Swift, обратитесь к разделу «Внешний менеджер зависимостей для Unity» по поводу их использования.

Дальнейшие шаги

Если в вашей игре всё ещё возникают проблемы компиляции, сборки или запуска, связанные с Firebase, изучите страницу проблем Firebase SDK для Unity и рассмотрите возможность создания новой проблемы. Кроме того, ознакомьтесь со страницей поддержки Firebase, чтобы узнать о дополнительных возможностях.