Введение
Ниже приведено руководство по отладке процесса компиляции и сборки игр Unity с использованием Firebase SDK для Unity. В нем описывается, как исследовать и решать многие из наиболее распространенных проблем, с которыми вы можете столкнуться при настройке и сборке игры для новой платформы или после обновления. Оно организовано в порядке, когда эти ошибки могут возникнуть в процессе. Ознакомьтесь с ними по порядку и продолжайте по мере устранения каждой из них.
В дополнение к этому документу, для получения дополнительной информации ознакомьтесь с часто задаваемыми вопросами по Firebase для Unity .
Проблемы компиляции Play Mode
Первый класс проблем сборки может возникнуть во время тестирования в редакторе перед попыткой запустить мобильную сборку. В этом разделе рассматриваются все ошибки Firebase, которые возникают до и во время Play Mode.
Когда 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 Package Manager.
- Чтобы импортировать соответствующие пакеты, выполните одно из следующих действий:
Если вы импортировали Firebase Unity SDK до версии "10.0.0" как
.unitypackage
s, 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-<version>.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, лучше всего сохранить только версии UPM EDM4U, которые можно найти на странице Google APIs for Unity Archive .
Убедитесь, что все продукты Firebase в вашем проекте имеют одинаковую версию.
- Если Firebase SDK были установлены через
.unitypackage
, проверьте, все ли библиотекиFirebaseCppApp
вAssets/Firebase/Plugins/x86_64/
имеют одинаковую версию. - Если Firebase SDK были установлены через Unity Package Manager (UPM), откройте Windows > Package Manager , найдите «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 появилась функция Minification , позволяющая удалять неиспользуемый код, что позволяет сократить общее количество методов, на которые есть ссылки, в одном файле dex. * Эту опцию можно найти в разделе Player Settings > Android > Publishing Settings > Minify . * Параметры могут различаться в разных версиях Unity, поэтому обратитесь к официальной документации Unity.
Включить Multidex
Если после включения минификации количество ссылочных методов все еще превышает лимит, другой вариант — включить multidex
. В Unity есть несколько способов добиться этого:
- Если в настройках проигрывателя включен пользовательский шаблон Gradle , измените
mainTemplate.gradle
. - Если вы используете Android Studio для сборки экспортированного проекта, измените файл build.gradle на уровне модуля.
Более подробную информацию можно найти в руководстве пользователя Multidex .
Понимание и исправление ошибок выполнения целевого устройства
Если ваша игра работает в редакторе и может быть собрана и установлена на целевом устройстве, но вы сталкиваетесь с ошибками во время выполнения, проверьте и изучите журналы, созданные на устройстве .
В этом разделе подробно описывается, как исследовать журналы на предмет возможных ошибок, а также одна такая ошибка, которая возникает только во время выполнения на устройстве или симуляторе.
андроид
Симулятор
- Проверьте журналы, отображаемые в консоли эмулятора, или просмотрите окно Logcat .
Устройство
Ознакомьтесь с adb и adb logcat и способами их использования.
- Хотя вы можете использовать различные инструменты командной строки для фильтрации вывода, рассмотрите возможность использования опций logcat.
Простой способ начать сеанс АБР с чистого листа:
adb logcat -c && adb logcat <OPTIONS>
где
OPTIONS
— это флаги, которые вы передаете в командной строке для фильтрации вывода.
Использование Logcat через Android Studio
При использовании Logcat через Android Studio доступны дополнительные инструменты поиска , которые упрощают создание продуктивных поисковых запросов.
iOS
Проверка журналов
Если работает физическое устройство, подключите его к компьютеру. Проверьте lldb в Xcode.
Вопросы Swift
Если вы обнаружите в журналах ошибок упоминание Swift, обратитесь к разделу «Диспетчер внешних зависимостей для Unity» по поводу их использования.
Дальнейшие шаги
Если в вашей игре все еще есть проблемы компиляции, сборки или запуска, связанные с Firebase, изучите страницу проблем Firebase SDK для Unity и рассмотрите возможность подачи новой проблемы. Кроме того, обратитесь к странице поддержки Firebase, чтобы узнать о дополнительных возможностях.