Введение
Ниже представлено руководство по отладке процесса компиляции и сборки игр Unity с использованием Firebase SDK для Unity. В нём описывается, как исследовать и решать многие из наиболее распространённых проблем, которые могут возникнуть при настройке и сборке игры для новой платформы или после обновления. Руководство расположено в порядке возникновения этих ошибок. Ознакомьтесь с ними по порядку и действуйте по мере устранения каждой ошибки.
В дополнение к этому документу, для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами по Firebase для Unity .
Проблемы компиляции Play Mode
Первый класс проблем сборки может возникнуть при тестировании в редакторе перед запуском мобильной сборки. В этом разделе рассматриваются все ошибки Firebase, возникающие до и во время режима воспроизведения.
При запуске Unity или обнаружении изменений в зависимостях, коде или других ресурсах, она попытается пересобрать проект. Если проект не скомпилируется в этот момент, редактор выведет ошибки компиляции в консоль, а при попытке перейти в режим воспроизведения на вкладке «Сцена» Unity появится всплывающее окно с сообщением: All compiler errors have to be fixed before you can enter playmode!
.
Отладка проблем компиляции, связанных с Firebase
Отсутствующие типы, классы, методы и члены
Многие проблемы 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>'
Шаги решения:
Если вы используете классы или методы Firebase в коде, убедитесь, что вы делаете их доступными, используя правильные директивы
using
для конкретных необходимых продуктов Firebase.Убедитесь, что вы импортировали соответствующие пакеты Firebase:
- Чтобы импортировать соответствующие пакеты:
- Добавьте Firebase Unity SDK как
.unitypackage
или - Изучите и выполните одну из альтернатив в разделе Дополнительные варианты установки Unity .
- Добавьте Firebase Unity SDK как
- Убедитесь, что каждый продукт Firebase в вашем проекте и EDM4U :
- Находятся в одной и той же версии
- Были установлены либо исключительно как
.unitypackage
, либо исключительно через менеджер пакетов Unity.
- Чтобы импортировать соответствующие пакеты:
Если вы импортировали Firebase Unity SDK версии ниже 10.0.0 как
.unitypackage
, ZIP-архив Firebase Unity SDK содержит пакеты для поддержки как .NET 3.x, так и .NET 4.x. Убедитесь, что в ваш проект включена только совместимая версия .NET Framework:- Совместимость между версиями редактора Unity и уровнями .NET Frameworks обсуждается в разделе Добавление Firebase в ваш проект Unity .
- Если вы случайно импортировали пакеты Firebase на неправильном уровне .NET Framework или вам нужно переключиться с использования
.unitypackage
на один из дополнительных вариантов установки Unity , самый простой способ — удалить все пакеты Firebase с помощью методов, упомянутых в этом разделе миграции , а затем повторно импортировать все пакеты Firebase.
Убедитесь, что ваш редактор перестраивает ваш проект и что ваши попытки воспроизведения отражают наиболее актуальное состояние вашего проекта:
- По умолчанию редактор Unity настроен на пересборку при каждом обнаружении изменений в активах или конфигурации.
- Возможно, эта функция отключена, и редактор Unity настроен на ручное обновление/перекомпиляцию . Проверьте это и попробуйте выполнить ручное обновление, если это так.
Ошибки выполнения режима воспроизведения
Если ваша игра запускается, но во время работы возникают проблемы с Firebase, попробуйте сделать следующее:
Убедитесь, что вы одобряете пакеты Firebase в разделе «Безопасность и конфиденциальность» на Mac OS.
Если при запуске игры в редакторе на Mac OS появляется диалоговое окно с сообщением «FirebaseCppApp-<версия>.bundle Невозможно открыть, так как не удалось проверить разработчика.», вам необходимо одобрить этот конкретный файл пакета в меню «Безопасность и конфиденциальность» на Mac.
Для этого нажмите значок Apple > «Системные настройки» > «Безопасность и конфиденциальность».
В меню безопасности, примерно в середине страницы, есть раздел, в котором говорится: «Использование файла «FirebaseCppApp-<версия>.bundle» было заблокировано, так как он принадлежит неустановленному разработчику».
Нажмите кнопку Разрешить в любом случае .
Вернитесь в Unity и снова нажмите Play .
Затем вы увидите предупреждение, похожее на первое:
Нажмите кнопку «Открыть» , и ваша программа сможет продолжить работу; больше вам не придется спрашивать об этом конкретном файле.
Убедитесь, что ваш проект содержит и использует действительные файлы конфигурации.
- Убедитесь, что настройки сборки соответствуют целевой платформе (iOS или Android) в меню «Файл» > «Настройки сборки» . Более подробную информацию см. в документации по настройкам сборки Unity .
- Загрузите файл конфигурации для своего приложения (
google-services.json
для Android илиGoogleService-Info.plist
для iOS) и соберите целевой объект из консоли Firebase в разделе «Настройки проекта» > «Ваши приложения» . Если у вас уже есть эти файлы, удалите их в своем проекте и замените их самой последней версией, убедившись, что они написаны точно так, как указано выше, без «(1)» или других цифр, прикрепленных к именам файлов. - Если консоль содержит сообщение о файлах в
Assets/StreamingAssets/
, убедитесь, что нет сообщений о том, что Unity не удалось редактировать файлы в этом месте. - Убедитесь, что
Assets/StreamingAssets/google-services-desktop.json
сгенерирован и соответствует загруженному файлу конфигурации.- Если он не создается автоматически и
StreamingAssets/
не существует, вручную создайте каталог в каталогеAssets
. - Проверьте, сгенерировал ли Unity файл
google-services-desktop.json
.
- Если он не создается автоматически и
Убедитесь, что все продукты Firebase и EDM4U установлены исключительно через .unitypackage
или Unity Package Manager.
- Проверьте папку
Assets/
и диспетчер пакетов Unity, чтобы убедиться, что Firebase SDK и EDM4U были установлены исключительно одним или другим методом. - Некоторые плагины, разработанные Google , например, из Google Play, а также сторонние плагины могут зависеть от EDM4U. Эти плагины могут включать EDM4U в свои
.unitypackage
или пакеты Unity Package Manager (UPM). Убедитесь, что в вашем проекте есть только одна копия EDM4U. Если какие-либо пакеты UPM зависят от EDM4U, лучше всего сохранить только версии EDM4U для UPM, которые можно найти на странице архива API Google для Unity .
Убедитесь, что все продукты Firebase в вашем проекте имеют одинаковую версию.
- Если Firebase SDK были установлены через
.unitypackage
, проверьте, все ли библиотекиFirebaseCppApp
вAssets/Firebase/Plugins/x86_64/
имеют одинаковую версию. - Если пакеты Firebase SDK были установлены через диспетчер пакетов Unity (UPM), откройте Windows > Диспетчер пакетов , найдите «Firebase» и убедитесь, что все пакеты Firebase имеют одинаковую версию.
- Если ваш проект содержит разные версии 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, чтобы узнать о дополнительных возможностях.