Facebook-sdk-for-unity: Android - сбой при запуске из-за несовместимости зависимостей

Созданный на 3 авг. 2019  ·  25Комментарии  ·  Источник: facebook/facebook-sdk-for-unity

Привет,

мы используем Facebook SDK вместе с Firebase SDK, и после обновления до Unity 2019.2 мне пришлось обновить Firebase SDK до версии 6.2.2 (из-за ошибок в редакторе Unity), и теперь он несовместим с Facebook SDK из-за проблемы в разрешении зависимостей. Вот предупреждение, которое я получаю от Play Services Resolver при разрешении:

Обнаружены противоречивые зависимости.
Были изменены следующие версии зависимостей:
com.android.support:appcompat-v7:25.3.1 -> androidx.appcompat: appcompat: 1.0.0
com.android.support:cardview-v7:25.3.1 -> androidx.cardview: cardview: 1.0.0
com.android.support:customtabs:25.3.1 -> androidx.browser: browser: 1.0.0
com.android.support:support-v4:25.3.1 -> androidx. наследие: устаревшая-поддержка-v4 : 1.0.0

Это приводит к сбою при запуске на Android.

Я не очень разбирался в этом, но думаю, обновил Play Services Resolver до более новой версии и исправил зависимости здесь: https://github.com/facebook/facebook-sdk-for-unity/blob/master/Facebook.Unity .Editor / android / AndroidSupportLibraryResolver.cs может помочь.

Также ищите дополнительную информацию здесь:
https://github.com/googlesamples/unity-jar-resolver/blob/master/CHANGELOG.md#version -12118 --- 18 июня 2019 г.
Может быть полезно для ее решения. Кстати, Firebase сейчас использует Play Services Resolver 1.2.122. Думаю, пора обновить его и для Facebook SDK.

Это действительно серьезная проблема, поскольку сейчас мы не можем использовать официальный Facebook SDK на Unity 2019.2 вместе с Firebase. Мы также не можем понизить версию Unity, поскольку она исправляет еще одну существенную ошибку. Из-за этого мы как бы застряли, и пока это не будет исправлено, мы вынуждены отключить функции Facebook в нашей игре.

Вероятно, это та же проблема, что описана в одном из комментариев здесь: https://github.com/facebook/facebook-sdk-for-unity/issues/281

Самый полезный комментарий

@KylinChang - да, мои проблемы пока исправлены. Это благодаря форку, сделанному @ michael-looply. Однако его изменения необходимо добавить в основной репозиторий, иначе это всего лишь временное исправление. Спасибо.

Все 25 Комментарий

Привет, @andnoonesthere , у меня была такая же проблема, и вчера я потратил некоторое время на создание вилки, которая работает с 2019.2.0f1 и Firebase. Я протестировал функциональные возможности обоих SDK на Android и iOS, и, похоже, все работает, как ожидалось. В качестве предупреждения изменения в моей вилке должны сделать процесс сборки обратно несовместимым при сборке SDK с помощью предоставленных сценариев с версиями Unity до 2019.2.0f1.

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

В случае , если вы заинтересованы в изменениях , которые я сделал, соответствующий дифференциал находится здесь . Пакет находится здесь .

Сообщите мне, если у вас возникнут проблемы с запуском.


Дополнительное примечание, относящееся к этой конкретной проблеме, поскольку на этот раз я публикую это в правильном репо: я удалил сценарий преобразователя, на который вы ссылались в своем комментарии, и перенес зависимости в файл Dependencies.xml, обновил версию преобразователя и исправил зависимость. проблемы, которые у меня были; которые, надеюсь, исправят их и для вас.

Привет Майкл,

Я только что протестировал ваши изменения (только для Android), и у меня тоже отлично сработало. Молодец! :)
Я также согласен с тем, что перемещение зависимостей в файл Dependencies.xml также является важным делом.

Глядя на ваши изменения, я думаю, что и исправление для зависимостей, и пути решения должны быть включены разработчиками в SDK, чтобы в будущем было проще вносить наши собственные изменения.

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

После некоторого дополнительного тестирования я вижу, что пока на устройстве все в порядке, я получаю это предупреждение в редакторе:

FB.Init () уже был вызван. Вам нужно вызвать это только один раз и только один раз.

Однако я на 100% уверен, что он вызывается только один раз, перед этим я провожу дополнительную проверку для FB.IsInitialized. Это может быть связано не с вашей модификацией, а с какой-то ошибкой в ​​недавнем FB SDK. Сообщите мне, если вы тоже испытаете это.

Рад помочь! Я буду стараться обновлять свой форк, поскольку новые версии SDK выпускаются до тех пор, пока не будет официально добавлен 2019.2.0f1.

Что касается вашего последнего комментария: я не вижу этого предупреждения в редакторе или на устройстве. Я подозреваю, что вы это видите, потому что FB.Init() не сразу устанавливает FB.IsInitialized в true ; SDK должен завершить инициализацию - которая не гарантируется немедленной - до установки FB.IsInitialized .

Редактор специально ожидает вызова делегата загрузки DLL, который можно увидеть здесь .

Я рекомендую отслеживать, выполняется ли инициализация Facebook, а также является ли FB.IsInitialized true или нет. Быстрый способ отследить это - использовать bool _isInitializing; который устанавливается в true во время FB.Init и устанавливается в false в InitDelegate который вы передаете в метод FB.Init . Таким образом, вы можете прервать дополнительные вызовы FB.Init если они выполняются, а также если они уже выполнены.

Хорошо, значит, ошибка связана с тем, как я загружаю сцены в режиме воспроизведения. При входе в режим воспроизведения я выгружаю все загруженные сцены, а затем загружаю свой собственный набор сцен. Вот где он загружался дважды, он уже был загружен в ту базовую сцену, которая была выгружена в начале. В любом случае спасибо за советы :)

Привет @KylinChang. Почему это было закрыто? Вы уже исправили проблемы с зависимостями на своей стороне, и это будет включено в следующую версию? Я не видел никакой информации об этом.

Привет, @andnoonesthere , я думал, вы

@KylinChang - да, мои проблемы пока исправлены. Это благодаря форку, сделанному @ michael-looply. Однако его изменения необходимо добавить в основной репозиторий, иначе это всего лишь временное исправление. Спасибо.

Привет, @andnoonesthere и @ michael-looply. Какую версию Firebase и Play Services Resolver вы используете, или, более простой вопрос, как вы используете обходной путь?

У нас точно такая же проблема, и мы пытаемся использовать Firebase 6.2.2 с его преобразователем игровых сервисов и обходным путем, предоставляемым @ michael-looply с его преобразователем игровых сервисов (мы пробовали оба преобразователя, а также тот, который не используйте gradle), но нам не удалось скомпилировать приложение. Я не уверен, что мы делаем что-то не так или есть какой-то другой плагин, который вызывает ту же проблему, что и Facebook (например, AdMob, IronSource и т. Д.)

Привет, @Wolar - я использую Firebase 6.2.2 и Resolver 1.2.124.0. В моем проекте я храню только один каталог PlayServicesResolver . Какие ошибки компиляции вы видите? В настоящий момент я не использую какие-либо SDK для рекламного посредничества, кроме Unity Ads, поэтому я не могу сказать, вызывают ли они больше проблем.

Это ошибка сборки gradle, и это что-то вроде:

"com.android.support.support-v4-27.0.2.aar" с использованием Jetifier. Причина. Данный артефакт содержит строковый литерал со ссылкой на пакет "android.support.v4", который нельзя безопасно переписать. Библиотеки, использующие отражение, такие поскольку обработчики аннотаций необходимо обновить вручную, чтобы добавить поддержку androidx .. () "

Facebook SDK использует эту библиотеку, и я думаю, что ее используют и другие библиотеки. Я пробовал как Jetifier, так и отключенный в PlayServicesResolver, но без какого-либо эффекта. Мы также используем настраиваемый шаблон gradle, поэтому PlayServicesResolver не копирует библиотеки в папку Plugins, а скорее добавляет их в этот шаблон gradle, но я думаю, это не должно играть никакой роли.

@Wolar Есть ли у вас этот AAR в вашем каталоге Assets? Возможно, другой SDK не использует Resolver, а просто напрямую импортирует AAR в проект.

В качестве альтернативы, содержит ли ваш блок зависимостей в mainTemplate.gradle две ссылки на библиотеку поддержки? Вы не можете иметь в списке две явные версии одной и той же библиотеки; если у вас есть одна строка в блоке зависимостей, например implementation 'com.android.support:support-v4:25.3.1' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7 из Resolver внутри

// Android Resolver Dependencies Start
... dependencies
// Android Resolver Dependencies End

раздел и есть еще один за пределами этого раздела, например implementation 'com.android.support:support-v4:27.0.2' , тогда вы не сможете построить. Например, подключаемый модуль ironSource Unity рекомендует вручную изменить файл mainTemplate.gradle со ссылкой на библиотеку поддержки . Возможно, вам потребуется создать Dependencies.xml для ironSource, который Resolver сможет обработать, вместо того, чтобы напрямую изменять

@ michael-looply Я почти уверен, что у нас есть один из AAR в папке плагинов, но я думаю, что пытался удалить его, поскольку я ожидал, что это может вызвать проблему, но я думаю, что это не помогло. Я проверю другие SDK, такие как IronSource, спасибо :)

Я смог это решить, проблем было больше. Что мне действительно помогло, так это экспорт проекта как проект Android Studio и отладка его там. По сути, эти библиотеки также конфликтовали с AdMob и некоторой оставшейся библиотекой от Fabric, которую мы больше не используем. Итак, я обновил AdMob, удалил этот aar, сильно изменил несколько версий библиотек в файлах зависимостей, и, похоже, он работает с jetifier как библиотеки androidx. Спасибо за помощь @ michael-looply

@Wolar Рад слышать, что он работает! Рад помочь :)

Итак, @KylinChang, когда мы можем ожидать прогресса в этом

@KylinChang ?

По-прежнему проблема в феврале 2020 года.

  • Unity 2019.3.1f1 (возврат на более раннюю версию невозможен)
  • новейший facebook-unity-sdk-7.18.1
  • принудительное использование androidx и jetifier из-за новейшей версии AdMob (переход на более раннюю версию невозможен)
  • Решатель Android по-прежнему генерирует упомянутые устаревшие зависимости в ProjectSettings / AndroidResolverDependencies.xml, а также в шаблоне gradle. Никаких других упоминаний об устаревших библиотеках в рамках всего проекта
  • устаревшие библиотеки исчезают после удаления Facebook SDK.

Есть ли планы по обновлению зависимостей FacebookSDK?

По-прежнему проблема в марте 2020 г.

  • Единство 2019.3.4f1
  • Facebook SDK 7.18.1
  • IronSource SDK 6.15.0.1

Не могу построить, я думаю, любой другой SDK на планете. Включены Firebase и IronSource. Это смешно, потому что это напрямую относится к оптимизации рекламы, вещам, связанным с деньгами.

По-прежнему проблема в марте 2020 г.

  • Единство 2019.3.4f1
  • Facebook SDK 7.18.1
  • IronSource SDK 6.15.0.1

Не могу построить, я думаю, любой другой SDK на планете. Включены Firebase и IronSource. Это смешно, потому что это напрямую относится к оптимизации рекламы, вещам, связанным с деньгами.

Решения Looply уже недостаточно для работы. Я исследовал эту проблему. Facebook необходимо обновить свой SDK, чтобы использовать AndroidX. Но в то же время Google предоставляет инструмент External Dependency Manager, который, как предполагается, объединяет SDK Facebook (и другие старые библиотеки), поэтому он будет работать с AndroidX. К сожалению, EDM по какой-то причине не работает с Facebook SDK. ОДНАКО: Jetifier, поставляемый с Android Studio, действительно работает! Просто экспортируйте свой проект из формы Unity, откройте в Android Studio, добавьте эти строки в gradle.properties:
android.useAndroidX = правда
android.enableJetifier = true

Собери и запусти, и все должно работать. Однако: Facebook необходимо исправить это немедленно. (Или Google нужно исправить свой Jetifier.) Однако все известные мне компании, большие и маленькие, выпустили версии своих библиотек для AndroidX. Я шокирован тем, что Facebook, огромная компания, еще не исправила это, так как это причиняет разработчикам много боли.

@lexscite

Для тех, кто все еще застрял на этом:
1) Вы можете исправить это с помощью Android Studio (как я уже упоминал выше).
2) Также есть решение от onesignal: https://documentation.onesignal.com/docs/troubleshooting-unity#section -android-x-compatibility, которое позволяет запускать сборки непосредственно из Unity (путем добавления файла settingsTemplate.gradle. )

Похоже, что поддержка Jetifier / AndroidX в Unity несколько нарушена.

Эта ошибка:
https://github.com/googlesamples/unity-jar-resolver/issues/360 - это то, что я подал в команду unity-jar-resolver, но мы посмотрим, сможет ли эта команда исправить это.

Для работы Jetifier в Unity больше не требуется экспорт Android Studio.

Используя новейшую официальную версию 2019.3 (моя - 2019.3.12f1 atm), вы можете просто использовать настраиваемый шаблон свойств Gradle поверх основного шаблона Gradle и добавить:
android.useAndroidX=true
android.enableJetifier=true
во вновь созданный файл gradleTemplate.properties.

Я экспортирую в студию Android для сборки со всеми SDK, которые хочет мой издатель, и с тех пор борюсь с невзгодами ошибок сборки Android, как младший разработчик, я думаю, что столкнулся со всеми проблемами, но теперь я наконец могу создавать из Unity. Jetifier не работал с Facebook SDK должным образом, за исключением студии Android, поэтому, если вы использовали достаточное количество перенесенных плагинов AndroidX, было бы сложно создать из Unity без некоторых хакерских изменений.

Мне также обычно приходится менять Plugins / Android / AndroidManifest.xml, чтобы это было в теге приложения:
tools:replace="android:appComponentFactory" android:appComponentFactory="leavemealone"
также xmlns:tools="http://schemas.android.com/tools" в теге манифеста

Да, это случайная строка, так как я не уверен, какова ее цель, но она работает и исправляет мою манифестную ошибку сборки слияния, да ладно.

Теперь я могу создавать с помощью Ironsource (многие адаптеры с ним), Facebook SDK, GameAnalytics, Adjust, Firebase и т. Д. В основном просто получите последнюю версию Unity Jar Resolver, проверьте настройки, удалите автоматическое разрешение, удалите разрешение при сборке, установите патч maintemplate и используйте jetifier в значение true, принудительное разрешение, добавьте любые дополнительные зависимости / репозитории, которые вы хотите, выполните трюк с gradleproperties, выполните сборку в Unity, готово .

Я столкнулся с этой проблемой в Facebook Unity SDK v8.1.1. Обязательно ли мне делать все, что делал @ mohamad-al-amaary, каждый раз, когда я хочу интегрировать Facebook Unity SDK?

@ nguyentrong101094
В версиях Unity 2019.4 LTS у меня не было проблем, все, что вам нужно сделать, это эта часть моего первоначального ответа:
android.useAndroidX = правда
android.enableJetifier = true

Также я думаю, что в новом EDM есть опция «Patch gradleTemplate.properties», которая должна сделать это даже за вас. Я просто включаю настраиваемый основной манифест, настраиваемый основной шаблон Gradle, настраиваемый шаблон свойств Gradle для каждого проекта, по крайней мере, сейчас, и устанавливаю два свойства и обязательно разрешаю с помощью EDM (https://github.com/googlesamples/unity-jar- resolver / blob / master / external-dependency-manager-latest.unitypackage) перед сборкой.

@ Subtle-Tea Я пробовала. Я все еще получаю эту ошибку при сборке

AndroidManifest.xml:38: AAPT: error: unexpected element <queries> found in <manifest>.

Я использую Unity 2019.4.17

Была ли эта страница полезной?
0 / 5 - 0 рейтинги