Facebook-sdk-for-unity: Android - Crash saat startup disebabkan oleh ketidakcocokan dalam dependensi

Dibuat pada 3 Agu 2019  ·  25Komentar  ·  Sumber: facebook/facebook-sdk-for-unity

Halo,

kami menggunakan SDK Facebook bersama dengan SDK Firebase dan setelah memperbarui ke Unity 2019.2 saya terpaksa memperbarui SDK Firebase ke versi 6.2.2 (karena kesalahan dalam editor Unity) dan sekarang tampaknya tidak kompatibel dengan SDK Facebook karena masalah dalam menyelesaikan ketergantungan. Berikut peringatan yang saya dapatkan dari Play Services Resolver saat menyelesaikan:

Beberapa dependensi yang saling bertentangan ditemukan.
Versi ketergantungan berikut telah dimodifikasi:
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. warisan: dukungan-legacy-v4 :1.0.0

Ini menghasilkan crash saat startup di Android.

Saya belum banyak menggalinya, tetapi saya kira memperbarui Play Services Resolver ke beberapa versi yang lebih baru dan memperbaiki dependensi di sini: https://github.com/facebook/facebook-sdk-for-unity/blob/master/Facebook.Unity .Editor/android/AndroidSupportLibraryResolver.cs mungkin bisa membantu.

Lihat juga info lebih lanjut di sini:
https://github.com/googlesamples/unity-jar-resolver/blob/master/CHANGELOG.md#version -12118---jun-18-2019
Mungkin bisa membantu untuk menyelesaikannya. BTW, Firebase menggunakan Play Services Resolver 1.2.122 sekarang. Saya kira sudah waktunya untuk memperbaruinya untuk SDK Facebook juga.

Ini adalah masalah yang sangat serius, karena kami tidak dapat menggunakan SDK Facebook resmi di Unity 2019.2 bersama dengan Firebase sekarang. Kami juga tidak dapat menurunkan versi Unity karena ini memperbaiki bug signifikan lainnya. Karena itu kami terjebak dan sampai ini diperbaiki kami terpaksa menonaktifkan fungsi Facebook di game kami.

Ini mungkin masalah yang sama seperti yang dijelaskan dalam salah satu komentar di sini: https://github.com/facebook/facebook-sdk-for-unity/issues/281

Komentar yang paling membantu

@KylinChang - ya, masalah saya sudah diperbaiki untuk saat ini. Ini berkat fork yang dibuat oleh @michael-looply Namun perubahannya perlu ditambahkan ke repositori utama, jika tidak, itu hanya perbaikan sementara. Terima kasih.

Semua 25 komentar

Hai @andnoonesthere , saya memiliki masalah yang sama dan menghabiskan beberapa waktu kemarin membuat garpu yang berfungsi w/ 2019.2.0f1 dan Firebase. Saya telah menguji fungsionalitas SDK di Android dan iOS dan _sepertinya_ semuanya berjalan seperti yang diharapkan. Sebagai peringatan, perubahan pada fork saya seharusnya membuat proses build tidak kompatibel dengan versi sebelumnya saat membuat SDK melalui skrip yang disediakan dengan versi Unity sebelum 2019.2.0f1.

Perhatikan bahwa jika Anda ingin membangun SDK secara lokal, saya memperbarui repo untuk meminta konfigurasi variabel lingkungan sehingga instance Unity berbasis Hub dapat digunakan (file .csproj dan skrip shell memiliki jalur hard-coded di repo ini, membuat tidak mungkin untuk membangun di atas mesin yang tidak menggunakan jalur yang tepat ke Unity).

Jika Anda tertarik dengan perubahan yang saya buat, perbedaan yang relevan ada di sini . Paket terletak di sini .

Beri tahu saya jika Anda memiliki masalah untuk bangun dan berjalan.


Catatan tambahan terkait dengan masalah khusus ini karena saya memposting ini di repo yang benar kali ini: Saya menghapus skrip resolver yang Anda rujuk dalam komentar Anda dan memigrasikan dependensi ke file Dependencies.xml dan memperbarui versi resolver dan memperbaiki ketergantungan masalah yang saya alami; yang mudah-mudahan akan memperbaikinya untuk Anda juga.

Halo Michael,

Saya baru saja menguji perubahan Anda (khusus Android) dan itu juga bekerja dengan baik untuk saya. Kerja bagus! :)
Saya juga setuju bahwa memindahkan dependensi ke file Dependencies.xml juga penting untuk dilakukan.

Melihat perubahan Anda, saya pikir perbaikan untuk dependensi dan jalur solusi harus disertakan dalam SDK oleh pengembang sehingga membuat modifikasi sendiri akan lebih mudah di masa mendatang.

Terima kasih lagi untuk pekerjaan Anda. Saya kira sampai mereka merilis tambalan resmi, saya akan menggunakan versi Anda :)

Setelah beberapa pengujian tambahan, saya melihat bahwa sementara di perangkat semuanya baik-baik saja, saya mendapatkan peringatan ini di editor:

FB.Init() telah dipanggil. Anda hanya perlu menelepon ini sekali dan hanya sekali.

Namun saya 100% yakin itu dipanggil hanya sekali, saya melakukan pemeriksaan tambahan untuk FB.IsInitialized sebelumnya. Itu mungkin juga tidak terhubung dengan modifikasi Anda tetapi beberapa bug di FB SDK baru-baru ini. Beritahu saya jika Anda mengalami hal ini juga.

Saya senang bisa membantu! Saya akan mencoba untuk terus memperbarui garpu saya karena versi SDK baru dirilis hingga 2019.2.0f1 ditambahkan secara resmi.

Mengenai komentar terakhir Anda: Saya tidak melihat peringatan itu di dalam editor atau di perangkat. Kecurigaan saya adalah Anda melihatnya karena FB.Init() tidak segera menetapkan FB.IsInitialized ke true ; SDK harus menyelesaikan inisialisasi - yang tidak dijamin langsung - sebelum FB.IsInitialized disetel.

Editor secara khusus menunggu delegasi beban DLL dipanggil, yang dapat dilihat di sini .

Saya sarankan untuk melacak apakah inisialisasi Facebook sedang berlangsung selain apakah FB.IsInitialized adalah true atau tidak. Cara cepat untuk melacak ini adalah dengan bool _isInitializing; yang disetel ke true pada saat FB.Init dan disetel ke false di InitDelegate yang Anda berikan ke metode FB.Init . Dengan begitu Anda dapat membatalkan panggilan FB.Init jika ada yang sedang berlangsung selain jika sudah selesai.

Oke, jadi kesalahannya adalah karena cara saya memuat adegan dalam mode putar. Saat memasuki mode putar, saya membongkar semua adegan yang dimuat, lalu memuat set adegan khusus saya. Di situlah dimuat dua kali, itu sudah dimuat di adegan dasar yang diturunkan di awal. Terima kasih untuk tipsnya :)

Hai @KylinChang. Mengapa ini ditutup? Anda sudah memperbaiki masalah dependensi di pihak Anda dan itu akan dimasukkan dalam versi berikutnya? Saya belum melihat informasi tentang itu.

Hai @andnoonesthere , saya pikir Anda telah memperbaiki masalahnya. Saya membuka kembali masalah dan mengajukan tugas untuk memperbaiki masalah.

@KylinChang - ya, masalah saya sudah diperbaiki untuk saat ini. Ini berkat fork yang dibuat oleh @michael-looply Namun perubahannya perlu ditambahkan ke repositori utama, jika tidak, itu hanya perbaikan sementara. Terima kasih.

Halo @andnoonesthere dan @michael-looply. Versi Firebase dan Play Services Resolver mana yang Anda gunakan, atau pertanyaan yang lebih sederhana, bagaimana Anda menggunakan solusi Anda?

Kami memiliki masalah yang sama persis dan kami mencoba menggunakan Firebase 6.2.2 dengan resolver layanan play-nya dan solusi yang disediakan oleh @michael-looply dengan resolver layanan play-nya (kami telah mencoba kedua resolver dan juga yang tidak gunakan gradle) tetapi kami tidak dapat mengkompilasi aplikasi. Saya tidak yakin apakah kami melakukan sesuatu yang salah atau ada plugin lain yang menyebabkan masalah yang sama seperti Facebook (seperti AdMob, IronSource, dll.)

Hai @Wolar - Saya menggunakan Firebase 6.2.2 dan Resolver 1.2.124.0. Saya hanya menyimpan satu direktori PlayServicesResolver di proyek saya. Kesalahan kompilasi apa yang Anda lihat? Saya tidak menggunakan SDK mediasi iklan apa pun di luar Unity Ads saat ini, jadi saya tidak dapat mengatakan apakah itu menyebabkan lebih banyak masalah atau tidak.

Ini adalah kesalahan build gradle dan itu seperti:

"com.android.support.support-v4-27.0.2.aar' menggunakan Jetifier. Alasan. Artefak yang diberikan berisi literal string dengan referensi paket 'android.support.v4' yang tidak dapat ditulis ulang dengan aman. Perpustakaan menggunakan refleksi seperti itu karena pemroses anotasi perlu diperbarui secara manual untuk menambahkan dukungan untuk androidx..()"

SDK Facebook menggunakan perpustakaan ini dan saya pikir beberapa perpustakaan lain juga menggunakannya. Saya telah mencoba Jetifier yang diaktifkan dan dinonaktifkan di PlayServicesResolver tetapi tanpa efek apa pun. Kami juga menggunakan template gradle khusus sehingga PlayServicesResolver tidak menyalin perpustakaan ke folder Plugins melainkan menambahkannya ke template gradle itu, tetapi saya kira itu tidak memainkan peran apa pun.

@Wolar Apakah Anda memiliki AAR yang ada di direktori Aset Anda? Ada kemungkinan SDK lain tidak menggunakan Resolver dan langsung mengimpor AAR ke dalam proyek.

Atau, apakah blok dependensi Anda di mainTemplate.gradle Anda berisi dua referensi ke pustaka dukungan? Anda tidak dapat mencantumkan dua versi eksplisit dari pustaka yang sama; jika Anda memiliki satu baris di blok dependensi Anda seperti implementation 'com.android.support:support-v4:25.3.1' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7 dari Resolver di dalam

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

bagian dan memiliki bagian lain di luar bagian itu seperti implementation 'com.android.support:support-v4:27.0.2' , maka Anda tidak akan dapat membangun. Misalnya, plugin ironSource Unity menyarankan untuk memodifikasi file mainTemplate.gradle secara manual dengan referensi pustaka dukungan . Anda mungkin perlu membuat Dependencies.xml untuk ironSource yang dapat diproses oleh Resolver alih-alih memodifikasi mainTemplate.gradle Anda secara langsung.

@ michael-looply Saya cukup yakin kami memiliki salah satu AAR di folder plugins juga, tetapi saya pikir saya mencoba untuk menghapusnya seperti yang saya harapkan dapat menyebabkan masalah tetapi saya pikir itu tidak membantu. Saya akan memeriksa SDK lain seperti IronSource, terima kasih :)

Saya bisa menyelesaikannya, itu lebih banyak masalah. Apa yang benar-benar membantu saya adalah mengekspor proyek sebagai proyek Android Studio dan men-debugnya di sana. Pada dasarnya lib ini juga bertentangan dengan AdMob dan beberapa perpustakaan sisa dari Fabric yang tidak lagi kami gunakan. Jadi saya memutakhirkan AdMob, menghapus aar itu, mengubah beberapa versi perpustakaan dengan susah payah dalam file ketergantungan dan tampaknya berfungsi dengan jetifier sebagai lib androidx. Terima kasih atas bantuannya @michael-looply

@Wolar Senang mendengarnya berhasil! Senang membantu :)

Jadi @KylinChang kapan kita bisa mengharapkan kemajuan yang satu ini?

@KylinChang ?

Masih menjadi masalah di Februari 2020.

  • Unity 2019.3.1f1 (downgrade tidak mungkin)
  • facebook-unity-sdk-7.18.1 terbaru
  • penggunaan androidx dan jetifier yang dipaksakan karena AdMob terbaru (penurunan versi tidak mungkin)
  • Penyelesai Android masih menghasilkan dependensi usang yang disebutkan di ProjectSettings/AndroidResolverDependencies.xml serta template gradle. Tidak ada penyebutan lain tentang perpustakaan usang di seluruh proyek
  • perpustakaan usang menghilang setelah menghapus Facebook SDK.

Apakah ada rencana untuk meningkatkan dependensi FacebookSDK?

Masih edisi Maret 2020

  • Persatuan 2019.3.4f1
  • SDK Facebook 7.18.1
  • IronSource SDK 6.15.0.1

Tidak dapat membangun dengan saya pikir SDK lain di planet ini. Firebase dan IronSource disertakan. Ini konyol karena langsung berlaku untuk pengoptimalan iklan, hal yang berhubungan dengan uang.

Masih edisi Maret 2020

  • Persatuan 2019.3.4f1
  • SDK Facebook 7.18.1
  • IronSource SDK 6.15.0.1

Tidak dapat membangun dengan saya pikir SDK lain di planet ini. Firebase dan IronSource disertakan. Ini konyol karena langsung berlaku untuk pengoptimalan iklan, hal yang berhubungan dengan uang.

Solusi Looply tidak lagi cukup untuk bekerja. Saya menyelidiki masalah ini. Facebook perlu memperbarui SDK mereka untuk menggunakan AndroidX. Tetapi sementara itu, Google menyediakan alat Pengelola Ketergantungan Eksternal, yang seharusnya membuat Jetify SDK Facebook (dan perpustakaan lama lainnya) sehingga akan bekerja dengan AndroidX. Sayangnya, EDM tidak bekerja dengan SDK Facebook karena alasan tertentu. NAMUN: Jetifier yang disertakan dengan Android Studio berfungsi! Cukup ekspor formulir proyek Anda Unity, buka di Android Studio, tambahkan baris ini ke gradle.properties:
android.useAndroidX=benar
android.enableJetifier=benar

Bangun dan jalankan dan semuanya harus berjalan. Namun: Facebook perlu memperbaiki pronto ini. (Atau Google perlu memperbaiki Jetifier mereka.) Namun, setiap perusahaan yang saya kenal, besar dan kecil, telah merilis versi AndroidX dari library mereka. Saya terkejut bahwa Facebook, sebuah perusahaan besar, belum memperbaikinya karena ini menyebabkan banyak kesulitan bagi pengembang.

@lexscite

Bagi siapa pun yang masih terjebak pada ini:
1) Anda dapat memperbaikinya menggunakan Android Studio (seperti yang saya sebutkan di atas.)
2) Ada juga solusi dari onesignal : https://documentation.onesignal.com/docs/troubleshooting-unity#section -android-x-compatibility yang memungkinkan Anda menjalankan build langsung dari Unity (dengan menambahkan file settingsTemplate.gradle. )

Tampaknya dukungan Jetifier/AndroidX di Unity agak rusak.

bug ini:
https://github.com/googlesamples/unity-jar-resolver/issues/360 adalah apa yang saya ajukan dengan tim unity-jar-resolver tetapi kami akan melihat apakah itu bahkan tim yang tepat untuk memperbaikinya.

Tidak perlu Ekspor Android Studio lagi agar Jetifier berfungsi dalam Unity.

Menggunakan versi resmi 2019.3 terbaru (milik saya adalah 2019.3.12f1 atm), Anda cukup menggunakan Custom Gradle Properties Template di atas Main Gradle Template, dan tambahkan:
android.useAndroidX=true
android.enableJetifier=true
ke file gradleTemplate.properties yang baru dibuat.

Saya telah mengekspor ke Android studio untuk membangun dengan semua SDK yang diinginkan penerbit saya dan bekerja melalui kesengsaraan kesalahan build Android sejak itu, sebagai pengembang junior saya pikir saya mengalami setiap masalah, tetapi sekarang saya akhirnya dapat membangun dari dalam Unity. Jetifier tidak bekerja dengan SDK Facebook dengan benar kecuali di Android studio, jadi jika Anda menggunakan cukup banyak plugin yang dimigrasikan ke AndroidX, akan sulit untuk membangun dari dalam Unity tanpa beberapa perubahan hacky.

Saya juga biasanya harus mengubah Plugins/Android/AndroidManifest.xml untuk memiliki ini di tag aplikasi:
tools:replace="android:appComponentFactory" android:appComponentFactory="leavemealone"
juga xmlns:tools="http://schemas.android.com/tools" dalam tag manifes

Ya, ini adalah string acak karena saya tidak yakin apa tujuannya, tetapi ini berfungsi dan memperbaiki kesalahan pembuatan penggabungan manifes saya, oh well.

Saya sekarang dapat membangun dengan Ironsource (banyak adaptor dengannya), Facebook SDK, GameAnalytics, Adjust, Firebase, apa pun. Pada dasarnya dapatkan Unity Jar Resolver terbaru, periksa pengaturan hapus penyelesaian otomatis, hapus penyelesaian pada build, setel patch maintemplate dan gunakan jetifier menjadi true, paksa penyelesaian, tambahkan dependensi/repos tambahan yang Anda inginkan, lakukan trik gradleproperties, bangun di dalam Unity, selesai .

Saya mengalami masalah ini di Facebook Unity SDK v8.1.1. Apakah saya harus melakukan semua hal yang @mohamad-al-amaary lakukan setiap kali saya ingin mengintegrasikan Facebook Unity SDK?

@nguyentrong101094
Dalam versi 2019.4 LTS Unity saya tidak memiliki masalah, yang perlu Anda lakukan hanyalah bagian ini dari balasan awal saya:
android.useAndroidX=benar
android.enableJetifier=benar

Juga saya pikir EDM baru memiliki opsi "Patch gradleTemplate.properties" yang seharusnya melakukannya untuk Anda. Saya baru saja mengaktifkan Manifes Utama Kustom, Templat Gradle Utama Kustom, Templat Properti Gradle Kustom setiap proyek sekarang setidaknya, dan mengatur dua properti, dan pastikan untuk menyelesaikan dengan EDM (https://github.com/googlesamples/unity-jar- resolver/blob/master/external-dependency-manager-latest.unitypackage) sebelum membangun.

@Halus-Teh Saya mencobanya. Saya masih mendapatkan kesalahan ini saat membangun

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

Saya menggunakan Unity 2019.4.17

Apakah halaman ini membantu?
0 / 5 - 0 peringkat