Facebook-sdk-for-unity: Android - تعطل عند بدء التشغيل بسبب عدم التوافق في التبعيات

تم إنشاؤها على ٣ أغسطس ٢٠١٩  ·  25تعليقات  ·  مصدر: facebook/facebook-sdk-for-unity

مرحبا،

نحن نستخدم Facebook SDK مع Firebase SDK وبعد التحديث إلى Unity 2019.2 اضطررت إلى تحديث Firebase SDK إلى الإصدار 6.2.2 (بسبب الأخطاء في محرر Unity) ويبدو الآن أنه غير متوافق مع Facebook SDK بسبب المشكلة في حل التبعيات. إليك تحذير أحصل عليه من محلل خدمات Play أثناء الحل:

تم العثور على بعض التبعيات المتضاربة.
تم تعديل إصدارات التبعية التالية:
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: المتصفح: 1.0.0
com.android.support:support-v4:25.3.1 -> androidx. إرث: legacy-support-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 - Jun-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 - نعم ، تم إصلاح مشاكلي في الوقت الحالي. هذا بفضل fork الذي تم إجراؤه بواسطة @ michael-looply ومع ذلك ، يجب إضافة تغييراته إلى المستودع الرئيسي ، وإلا فهو مجرد إصلاح مؤقت. شكرا.

ال 25 كومينتر

مرحبًا andnoonesthere ، لقد واجهت نفس المشكلة وقضيت بعض الوقت أمس في صنع مفترق يعمل مع 2019.2.0f1 و Firebase. لقد اختبرت وظائف كل من SDKs على Android و iOS ويبدو أن كل شيء يعمل كما هو متوقع. كتحذير ، يجب أن تجعل التغييرات في my fork عملية الإنشاء غير متوافقة مع الإصدارات السابقة عند إنشاء SDK عبر البرامج النصية المتوفرة مع إصدارات Unity قبل 2019.2.0f1.

لاحظ أنه إذا كنت ترغب في إنشاء SDK محليًا ، فقد قمت بتحديث الريبو لطلب تكوين متغير بيئة بحيث يمكن استخدام مثيلات الوحدة المستندة إلى Hub (تحتوي ملفات .csproj ونصوص shell على مسارات مشفرة في هذا الريبو ، مما يجعل من المستحيل البناء على آلات لا تستخدم هذا المسار الدقيق إلى الوحدة).

إذا كنت مهتمًا بالتغييرات التي أجريتها ، فستجد الفرق ذي الصلة هنا . الحزمة موجودة هنا .

اسمحوا لي أن أعرف إذا كان لديك أي مشاكل في النهوض والتشغيل.


ملاحظة إضافية تتعلق بهذه المشكلة بالذات منذ أن أنشر هذا في الريبو الصحيح هذه المرة: لقد أزلت البرنامج النصي لوحدة الحل الذي أشرت إليه في تعليقك وقمت بترحيل التبعيات إلى ملف Dependencies.xml وقمت بتحديث إصدار المحلل وقام بإصلاح التبعية القضايا التي كنت أواجهها ؛ التي نأمل أن تصلحها لك أيضًا.

مرحبا مايكل،

لقد اختبرت للتو تغييراتك (Android فقط) وعملت بشكل رائع بالنسبة لي أيضًا. أحسنت! :)
أوافق أيضًا على أن نقل التبعيات إلى ملف Dependencies.xml هو أمر مهم يجب القيام به أيضًا.

بالنظر إلى التغييرات التي أجريتها ، أعتقد أنه يجب تضمين كل من إصلاح التبعيات ومسارات الحل في SDK بواسطة المطورين ، لذا فإن إجراء التعديلات الخاصة بنا سيكون أسهل في المستقبل.

أشكرك مجددا لأجل عملك. أعتقد أنه حتى يتم إصدار تصحيح رسمي سأستخدم نسختك :)

بعد إجراء بعض الاختبارات الإضافية ، أرى أنه أثناء وجود الجهاز على ما يرام ، أحصل على هذا التحذير في المحرر:

تم بالفعل استدعاء FB.Init (). ما عليك سوى الاتصال بهذا مرة واحدة ومرة ​​واحدة فقط.

ومع ذلك ، فأنا متأكد بنسبة 100٪ أنه تم استدعائي مرة واحدة فقط ، فأنا أجري فحصًا إضافيًا لـ FB. تم التهيئة من قبل. قد يكون ذلك أيضًا غير مرتبط بتعديلك ولكن بعض الأخطاء في 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 - نعم ، تم إصلاح مشاكلي في الوقت الحالي. هذا بفضل fork الذي تم إجراؤه بواسطة @ 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 في الوقت الحالي ، لذلك لا يمكنني التحدث عما إذا كانت تسبب المزيد من المشكلات أم لا.

إنه خطأ بناء متدرج وهو شيء مثل:

"com.android.support.support-v4-27.0.2.aar 'باستخدام Jetifier. السبب. تحتوي الأداة المقدمة على سلسلة حرفية بمرجع حزمة" android.support.v4 "لا يمكن إعادة كتابته بأمان. المكتبات التي تستخدم انعكاسًا مثل حيث يجب تحديث معالجات التعليقات التوضيحية يدويًا لإضافة دعم لـ androidx .. () "

تستخدم Facebook SDK هذه المكتبة وأعتقد أن بعض المكتبات الأخرى تستخدمها أيضًا. لقد جربت تمكين وتعطيل Jetifier في PlayServicesResolver ولكن بدون أي تأثير. نحن نستخدم أيضًا قالب gradle مخصصًا بحيث لا يقوم PlayServicesResolver بنسخ المكتبات إلى مجلد الإضافات ولكنه يضيفها إلى قالب gradle هذا ولكن لا ينبغي أن يلعب هذا أي دور أعتقده.

Wolar هل لديك هذا AAR موجود في دليل الأصول الخاص بك؟ من المحتمل أن SDK آخر لا يستخدم المحلل ويقوم فقط باستيراد AARs مباشرة إلى المشروع.

بدلاً من ذلك ، هل يحتوي حظر التبعيات في mainTemplate.gradle على مرجعين لمكتبة الدعم؟ لا يمكنك إدراج نسختين صريحتين من نفس المكتبة ؛ إذا كان لديك سطر واحد في كتلة التبعيات الخاصة بك مثل implementation 'com.android.support:support-v4:25.3.1' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7 من محلل داخل ملف

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

ولديك قسم آخر خارج هذا القسم مثل implementation 'com.android.support:support-v4:27.0.2' ، فلن تتمكن من إنشاء ملفات. على سبيل المثال ، ينصح المكون الإضافي ironSource Unity بتعديل ملف mainTemplate.gradle يدويًا باستخدام مرجع مكتبة الدعم . قد تحتاج إلى إنشاء Dependencies.xml لمصدر حديدي يمكن للمحلل معالجته بدلاً من تعديل mainTemplate.gradle مباشرة.

@ michael-looply أنا متأكد من أن لدينا أحد AARs في مجلد الإضافات أيضًا ، لكنني أعتقد أنني حاولت حذفه كما توقعت أنه قد يسبب المشكلة ولكنني أعتقد أنه لم يساعد. سوف أتحقق من sdks الأخرى مثل IronSource ، شكرًا لك :)

لقد تمكنت من حلها ، لقد كان الأمر يتعلق بمزيد من المشكلات. ما ساعدني حقًا هو تصدير المشروع كمشروع Android Studio وتصحيحه هناك. في الأساس ، كانت هذه libs تتعارض أيضًا مع AdMob وبعض المكتبات المتبقية من Fabric التي لم نعد نستخدمها. لذلك قمت بترقية AdMob ، وحذفت ذلك aar ، وقمت بتغيير إصدارات قليلة من المكتبات في ملفات التبعية ، ويبدو أنه يعمل مع jetifier على أنه androidx libs. شكرا للمساعدة @ michael-looply

Wolar Glad لسماع أنها تعمل! سررت بالمساعدة :)

لذا KylinChang متى نتوقع تقدمًا في هذا؟

تضمين التغريدة

لا تزال مشكلة في فبراير 2020.

  • الوحدة 2019.3.1f1 (التخفيض مستحيل)
  • أحدث الفيسبوك-وحدة- 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 ، والتي من المفترض أن تعمل على Jetify SDK على Facebook (والمكتبات القديمة الأخرى) لذلك ستعمل مع AndroidX. لسوء الحظ ، لا يعمل EDM مع Facebook SDK لسبب ما. ومع ذلك: يعمل Jetifier الذي يأتي مع Android Studio! ما عليك سوى تصدير نموذج مشروعك Unity ، وفتحه في Android Studio ، وإضافة هذه السطور إلى gradle.properties:
android.useAndroidX = صحيح
android.enableJetifier = صحيح

بناء وتشغيل وكل شيء يجب أن يذهب. ومع ذلك: يحتاج Facebook إلى إصلاح هذا الأمر. (أو تحتاج Google إلى إصلاح Jetifier.) ومع ذلك ، فقد أصدرت كل شركة أعرفها ، كبيرة وصغيرة ، إصدارات AndroidX من مكتباتها. لقد صدمت لأن Facebook ، شركة ضخمة ، لم تصلح هذا الأمر بعد لأنها تسبب الكثير من الألم للمطورين.

تضمين التغريدة

لأي شخص لا يزال عالقًا في هذا:
1) يمكنك إصلاحه باستخدام Android Studio (كما ذكرت أعلاه.)
2) يوجد أيضًا حل من إشارة واحدة: https://documentation.onesignal.com/docs/troubleshooting-unity#section -android-x- التوافق الذي يتيح لك تشغيل الإنشاءات مباشرة من الوحدة (عن طريق إضافة ملف settingsTemplate.gradle. )

يبدو أن دعم Jetifier / AndroidX في Unity قد تم ضبطه إلى حد ما.

هذا الخطأ:
https://github.com/googlesamples/unity-jar-resolver/issues/360 هو ما قدمته إلى فريق وحدة الحل ولكننا سنرى ما إذا كان هذا هو الفريق المناسب لإصلاحه.

لم تعد هناك حاجة لـ Android Studio Exports حتى يعمل Jetifier داخل Unity.

باستخدام أحدث إصدار رسمي 2019.3 (ملكي هو 2019.3.12f1 atm) ، يمكنك فقط استخدام قالب خصائص Gradle المخصص أعلى قالب Gradle الرئيسي ، وإضافة:
android.useAndroidX=true
android.enableJetifier=true
إلى ملف gradleTemplate.properties الذي تم إنشاؤه حديثًا.

لقد كنت أقوم بالتصدير إلى Android studio للبناء مع جميع حزم SDK التي يريدها الناشر وأعمل على التغلب على مآسي أخطاء إنشاء Android منذ ذلك الحين ، وأعتقد أنني واجهت كل مشكلة بصفتي مطورًا مبتدئًا ، لكن الآن يمكنني أخيرًا البناء من داخل Unity. لم يكن Jetifier يعمل مع Facebook SDK بشكل صحيح باستثناء Android studio ، لذلك إذا استخدمت ما يكفي من المكونات الإضافية التي تم ترحيلها من 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 ، وتحقق من الإعدادات ، وإزالة الحل التلقائي ، وإزالة الحل عند البناء ، وتعيين نموذج صيانة التصحيح ، واستخدام jetifier إلى true ، وإجبار الحل ، وإضافة أي تبعيات / إعادة شراء إضافية تريدها ، وتنفيذ خدعة gradleproperties ، والبناء داخل Unity ، وتم ذلك .

واجهت هذه المشكلة على Facebook Unity SDK v8.1.1. هل يتعين علي القيام بكل الأشياء التي فعلها @ mohamad-al-amaary في كل مرة أرغب في دمج Facebook Unity SDK؟

@ nguyentrong101094
في إصدارات 2019.4 LTS Unity ، لم أواجه أية مشكلات ، كل ما عليك فعله هو هذا الجزء من ردي الأولي:
android.useAndroidX = صحيح
android.enableJetifier = صحيح

كما أعتقد أن EDM الجديد به خيار "Patch gradleTemplate.properties" والذي يجب أن يفعل ذلك من أجلك. أنا فقط أقوم بتمكين البيان الرئيسي المخصص ، قالب التدرج الرئيسي المخصص ، قالب خصائص Gradle المخصص لكل مشروع الآن على الأقل ، وقم بتعيين الخاصيتين ، وتأكد من الحل باستخدام EDM (https://github.com/googlesamples/unity-jar- المحلل / blob / master / external-التبعية-manager-latest.unitypackage) قبل الإنشاء.

@ رقيق الشاي حاولت ذلك. ما زلت أحصل على هذا الخطأ عند البناء

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

أنا أستخدم Unity 2019.4.17

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات