Facebook-sdk-for-unity: Android-依存関係の非互換性が原因で起動時にクラッシュする

作成日 2019年08月03日  ·  25コメント  ·  ソース: facebook/facebook-sdk-for-unity

こんにちは、

FacebookSDKをFirebaseSDKと一緒に使用しており、Unity 2019.2にアップデートした後、Firebase SDKをバージョン6.2.2にアップデートする必要がありました(Unityエディターのエラーのため)。問題が原因でFacebookSDKと互換性がないようです。依存関係の解決に。 解決中に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:browser:1.0.0
com.android.support:support-v4:25.3.1->androidx。 レガシー:レガシーサポート-v4 :1.0.0

Androidでの起動時にクラッシュが発生します。

あまり掘り下げていませんが、Playサービスリゾルバーを新しいバージョンに更新し、依存関係を修正していると思います: https

こちらも詳細をご覧ください。
https://github.com/googlesamples/unity-jar-resolver/blob/master/CHANGELOG.md#version -12118 --- jun-18-2019
それを解決するのに役立つかもしれません。 ところで、Firebaseは現在Play Services Resolver1.2.122を使用しています。 FacebookSDK用にも更新する時が来たと思います。

現在、Unity2019.2で公式のFacebookSDKをFirebaseと一緒に使用することはできないため、これは非常に深刻な問題です。 Unityバージョンは別の重大なバグを修正するため、ダウングレードすることもできません。 このため、私たちは一種の行き詰まりであり、これが修正されるまで、ゲームでFacebookの機能を無効にすることを余儀なくされています。

これはおそらく、ここのコメントの1つで説明されているのと同じ問題です: https

最も参考になるコメント

@ KylinChang-はい、私の問題は今のところ修正されています。 これは@ michael-looplyによって作成されたフォークのおかげです。ただし、彼の変更はメインリポジトリに追加する必要があります。そうしないと、一時的な修正にすぎません。 どうも。

全てのコメント25件

ねえ@andnoonesthere 、私は同じ問題を抱えていて、昨日、2019.2.0f1とFirebaseで機能するフォークを作るのに時間を費やしました。 AndroidとiOSの両方のSDKの機能をテストしましたが、すべてが期待どおりに実行されているように見えます。 警告として、2019.2.0f1より前のバージョンのUnityで提供されたスクリプトを介してSDKをビルドする場合、フォークの変更によりビルドプロセスに下位互換性がなくなるはずです。

SDKをローカルでビルドする場合は、環境変数の構成を要求するようにリポジトリを更新して、ハブベースのUnityインスタンスを使用できるようにしました( .csprojファイルとシェルスクリプトには、このリポジトリにハードコードされたパスがあり、 Unityへの正確なパスを使用しないマシンでビルドすることは不可能です)。

私が行った変更に興味がある場合は、関連する差分がここにありここにあり

起動と実行に問題がある場合はお知らせください。


今回は正しいリポジトリに投稿しているため、この特定の問題に関連する追加の注意事項:コメントで参照したリゾルバースクリプトを削除し、依存関係をDependencies.xmlファイルに移行して、リゾルバーのバージョンを更新しました。これにより、

こんにちはマイケル、

私はあなたの変更をテストしました(Androidのみ)そしてそれは私にとってもうまくいきました。 よくできた! :)
また、依存関係をDependencies.xmlファイルに移動することも重要なことであることに同意します。

変更を見ると、依存関係の修正とソリューションパスの両方が開発者によってSDKに含まれている必要があると思います。そうすれば、将来、独自の変更を行うのが簡単になります。

お疲れ様でした。 彼らが公式パッチをリリースするまで、私はあなたのバージョンを使用すると思います:)

追加のテストを行った後、デバイス上ですべてが正常であることがわかりましたが、エディターに次の警告が表示されます。

FB.Init()はすでに呼び出されています。 これを呼び出す必要があるのは1回だけです。

ただし、一度だけ呼び出されると100%確信しているので、直前にFB.IsInitializedの追加チェックを実行します。 それはあなたの変更とは関係がないかもしれませんが、最近のFBSDKのいくつかのバグです。 これも経験したら教えてください。

お力になれて、嬉しいです! 2019.2.0f1が正式に追加されるまで、新しいSDKバージョンがリリースされるので、フォークを最新の状態に保つようにします。

あなたの最後のコメントに関して:私はその警告を編集者またはデバイス上で見ていません。 私の疑惑は、 FB.Init()FB.IsInitializedtrueすぐに設定しないため、あなたがそれを見ているということです。 SDKは、 FB.IsInitializedが設定される前に、初期化を完了する必要があります(これは、即時であるとは限りません)。

エディタは、DLLロードデリゲートが呼び出されるのを具体的に待機します。これはます

FB.IsInitializedtrueかどうかに加えて、Facebookの初期化が進行中であるかどうかを追跡することをお勧めします。 これを追跡する簡単な方法はであるbool _isInitializing;に設定されますそのtrueの時にFB.InitとセットにfalseInitDelegateあなたに渡すことFB.Init方法。 そうすれば、すでに完了している場合に加えて、進行中の場合に追加のFB.Init呼び出しを中止できます。

OK、エラーはプレイモードでシーンをロードする方法が原因でした。 再生モードに入るとき、ロードされたすべてのシーンをアンロードしてから、カスタムのシーンセットをロードします。 ここで2回ロードされ、最初にアンロードされた基本シーンにすでにロードされています。 とにかくヒントをありがとう:)

ねえ@KylinChang。 なぜこれが閉鎖されたのですか? あなたはすでにあなたの側の依存関係の問題を修正しました、そしてそれは次のバージョンに含まれるでしょう? 私はそれに関する情報を見ていません。

こんにちは@andnoonesthere 、私はあなたが問題を修正したと思いました。 問題を再度開き、問題を修正するためのタスクを提出します。

@ KylinChang-はい、私の問題は今のところ修正されています。 これは@ michael-looplyによって作成されたフォークのおかげです。ただし、彼の変更はメインリポジトリに追加する必要があります。そうしないと、一時的な修正にすぎません。 どうも。

こんにちは@andnoonesthereと@

私たちはまったく同じ問題を抱えており、Firebase6.2.2をPlayサービスリゾルバーと@michaelによって提供される回避策で使用しようとしています-ループリーでPlayサービスリゾルバーを使用しています(両方のリゾルバーとそうでないものを試しましたgradleを使用)が、アプリケーションをコンパイルできませんでした。 何か間違ったことをしているのか、Facebookと同じ問題を引き起こす他のプラグイン(AdMob、IronSourceなど)があるのか​​わかりません。

こんにちは@ Wolar-私はFirebase6.2.2とResolver1.2.124.0を使用しています。 プロジェクトにPlayServicesResolverディレクトリを1つだけ保持しています。 どのようなコンパイルエラーが発生していますか? 現在、Unity Ads以外で広告メディエーションSDKを使用していないため、それらがさらに問題を引き起こしているかどうかについて話すことはできません。

これはgradleビルドエラーであり、次のようなものです。

"com.android.support.support-v4-27.0.2.aar'usingJetifier。Reason。指定されたアーティファクトにパッケージ参照 'android.support.v4'の文字列リテラルが含まれているため、安全に書き換えることができません。 androidx ..()のサポートを追加するには、アノテーションプロセッサを手動で更新する必要があるためです。」

Facebook SDKはこのライブラリを使用しており、他のライブラリでも使用されていると思います。 PlayServicesResolverでJetifierの有効化と無効化の両方を試しましたが、効果はありません。 また、カスタムgradleテンプレートを使用しているため、PlayServicesResolverはライブラリをPluginsフォルダーにコピーせず、そのgradleテンプレートに追加しますが、それは私が推測する役割を果たさないはずです。

@Wolar AssetsディレクトリにそのAARがありますか? 別のSDKがResolverを使用しておらず、AARをプロジェクトに直接インポートしている可能性があります。

または、 mainTemplate.gradleの依存関係ブロックにサポートライブラリへの2つの参照が含まれていますか? 同じライブラリの2つの明示的なバージョンをリストすることはできません。 依存関係ブロックにimplementation 'com.android.support:support-v4:25.3.1' // Assets/FacebookSDK/Plugins/Editor/Dependencies.xml:7ような1行がある場合、内部のResolverから

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

セクションを作成し、そのセクションの外にimplementation 'com.android.support:support-v4:27.0.2'ような別のセクションがあると、ビルドできなくなります。 たとえば、ironSource Unityプラグインは、サポートライブラリリファレンスを使用してmainTemplate.gradleファイルを手動で変更することをおmainTemplate.gradleを直接変更する代わりに、Resolverが処理できるironSourceのDependencies.xmlを作成する必要がある場合があります。

@ michael-looplyプラグインフォルダにもAARの1つがあると確信していますが、問題が発生する可能性があると予想して削除しようとしたと思いますが、役に立たなかったと思います。 IronSourceのような他のSDKをチェックします。ありがとうございます:)

私はそれを解決することができました、それはより多くの問題でした。 私が本当に助けてくれたのは、プロジェクトをAndroid Studioプロジェクトとしてエクスポートし、そこでデバッグすることでした。 基本的に、これらのライブラリはAdMobや、使用しなくなったFabricの残りのライブラリとも競合していました。 そこで、AdMobをアップグレードし、そのaarを削除し、依存関係ファイル内のライブラリのいくつかのバージョンを大幅に変更しました。これは、androidxlibとしてjetifierで動作しているようです。 助けてくれてありがとう@ michael-looply

@Wolarそれが機能していると聞いてうれしいです! お力になれて、嬉しいです :)

それで、 @ KylinChangはいつこれの進歩を期待できますか?

@KylinChang

2020年2月もまだ問題です。

  • Unity 2019.3.1f1(ダウングレード不可)
  • 最新のfacebook-unity-sdk-7.18.1
  • 最新のAdMobによるandroidxとjetifierの強制使用(ダウングレード不可)
  • Androidリゾルバーは、ProjectSettings /AndroidResolverDependencies.xmlおよびgradleテンプレートで前述の廃止された依存関係を引き続き生成します。 プロジェクト全体で廃止されたライブラリについては他に言及されていません
  • Facebook SDKを削除すると、廃止されたライブラリは表示されなくなります。

FacebookSDKの依存関係をアップグレードする計画はありますか?

2020年3月のまだ問題

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

地球上の他のSDKでは構築できません。 FirebaseとIronSourceが含まれています。 これはばかげているので、広告の最適化、お金に関連するものに直接適用されます。

2020年3月のまだ問題

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

地球上の他のSDKでは構築できません。 FirebaseとIronSourceが含まれています。 これはばかげているので、広告の最適化、お金に関連するものに直接適用されます。

Looplyのソリューションは、もはや十分に機能しません。 この問題を調査しました。 Facebookは、AndroidXを使用するためにSDKを更新する必要があります。 ただし、当面の間、GoogleはExternal Dependency Managerツールを提供します。このツールは、Facebook SDK(およびその他の古いライブラリ)をJetifyして、AndroidXで動作するようになっています。 残念ながら、EDMは何らかの理由でFacebookSDKと連携しません。 ただし、Android Studioに付属のJetifierは機能します! プロジェクトをUnityからエクスポートし、Android Studioで開き、次の行をgradle.propertiesに追加するだけです。
android.useAndroidX = true
android.enableJetifier = true

ビルドして実行すると、すべてがうまくいくはずです。 ただし、Facebookはこの問題を修正する必要があります。 (または、GoogleはJetifierを修正する必要があります。)しかし、私が知っているすべての会社は、大小を問わず、ライブラリのAndroidXバージョンをリリースしています。 巨大な会社であるFacebookが、開発者に多大な苦痛を与えているため、これをまだ修正していないことにショックを受けました。

@lexscite

まだこれに固執している人のために:
1)Android Studioを使用して修正できます(前述のとおり)。
2)onesignalからの解決策もあります

UnityでのJetifier / AndroidXのサポートはやや無効になっているようです。

このバグ:
https://github.com/googlesamples/unity-jar-resolver/issues/360は、私がunity-jar-resolverチームに提出したものですが、それが修正するのに適切なチームであるかどうかを確認します。

JetifierがUnity内で機能するために、AndroidStudioのエクスポートはもう必要ありません。

最新の2019.3公式バージョン(私のものは2019.3.12f1 atm)を使用すると、メインGradleテンプレートの上にカスタムGradleプロパティテンプレートを使用して、次を追加できます。
android.useAndroidX=true
android.enableJetifier=true
新しく生成されたgradleTemplate.propertiesファイルに。

私はAndroidStudioにエクスポートして、パブリッシャーが必要とするすべてのSDKでビルドし、それ以来、Androidビルドエラーの悲惨な状況に取り組んできました。ジュニア開発者として、すべての問題に遭遇したと思いますが、ついにUnity内からビルドできるようになりました。 JetifierはAndroidStudioを除いてFacebookSDKで適切に機能していなかったため、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リゾルバーを取得し、設定を確認して自動解決を削除し、ビルド時に解決を削除し、パッチmaintemplateを設定し、jetifierをtrueに設定し、解決を強制し、必要な依存関係/リポジトリを追加し、gradlepropertiesトリックを実行し、Unity内でビルドします。 。

Facebook Unity SDKv8.1.1でこの問題が発生しました。 Facebook Unity SDKを統合するたびに、@ mohamad-al-amaaryが実行したすべてのことを実行する必要がありますか?

@ nguyentrong101094
2019.4 LTS Unityバージョンでは問題はありませんでした。あなたがする必要があるのは、私の最初の返信からのこの部分だけです。
android.useAndroidX = true
android.enableJetifier = true

また、新しいEDMには「PatchgradleTemplate.properties」というオプションがあり、それを実行する必要があると思います。 少なくとも今はすべてのプロジェクトでカスタムメインマニフェスト、カスタムメインGradleテンプレート、カスタムGradleプロパティテンプレートを有効にし、2つのプロパティを設定し、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>.

Unity2019.4.17を使用しています

このページは役に立ちましたか?
0 / 5 - 0 評価