アプリケーションでキャスト機能を使用しています。正常に動作していましたが、突然Playストアコンソールでクラッシュの数が増加していることがわかりました。
ガイドラインで定義されているようにCastContextを適切に初期化しています。さらに、このメソッドCastContext.getSharedInstance(context)
を呼び出す前に、デバイスに互換性があるかどうかを確認しています。これは問題にはなりません。
Google-play-servicesの有無にかかわらず、エミュレーターでもこのクラッシュを再現することはできません。
どんな助けでもありがたいです。
クラッシュ:
致命的な例外:Java.lang.RuntimeException:アクティビティを開始できませんComponentInfo {... .activity.TVActivityPhone}:Java.lang.RuntimeException:com.google.Android.gms.dynamite.DynamiteModule $ zza:リモートロードに失敗しました。ローカルフォールバックが見つかりません。 Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2677)at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2747)at Android.app.ActivityThread.access $ 900(ActivityThread.Java:187)at Android.app .ActivityThread $ H.handleMessage(ActivityThread.Java:1584)at Android.os.Handler.dispatchMessage(Handler.Java:111)at Android.os.Looper.loop(Looper.Java:194)atAndroid.app.ActivityThread。 main(ActivityThread.Java:5877)at Java.lang.reflect.Method.invoke(Method.Java)at Java.lang.reflect.Method.invoke(Method.Java:372)at com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.Java:1020)at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:815)Java.lang.RuntimeExceptionが原因:com.google.Android.gms.dynamite.DynamiteModule $ zza:リモートロードに失敗しました。ローカルフォールバックが見つかりません。
Codeif内でエラーが発生します。これは、GooglePlay開発者サービスの可用性に関するものではないことを意味します。
if (googlePlayServicesVerified(context)) { // checking (result==ConnectionResult.SUCCES)
Log.d("TAG", "instantiated");
castContext = CastContext.getSharedInstance(context);
} else {
Log.e(TAG, "FAILED");
}
グーグルにバグを提出:
https://issuetracker.google.com/issues/65359941
**更新**次の2つの問題を確認してください。
https://issuetracker.google.com/issues/65359941https://issuetracker.google.com/issues/794059
一時的な解決策は私の答えにあります。
これは一時的な解決策です。
1)Cast APIを使用する前に、アプリは常にGPSバージョンを確認する必要があります
2)CastContext.getSharedInstance()が失敗するのを許可します。おそらく例外をスロー/キャッチします(またはnullを返します)。
3)ダイナマイトモジュールのロードに失敗しても、何も壊さないように注意してください。 MiniControllerFragmentなど、CastContext.getSharedInstance()を呼び出す暗黙的に初期化されるUIウィジェットがいくつかあります。ダイナマイトのロードに失敗した場合は、クラッシュさせないようにする必要があります。
public static boolean isAvailable(Context context)
{
GoogleApiAvailability availability = GoogleApiAvailability.getInstance();
return isGooglePlayServicesAvailable(context, availability) &&
isCastContextAvailable(context);
}
public static boolean isAvailable(Context context) {
if (googlePlayServicesVerified(context)) {
try {
castContext = CastContext.getSharedInstance(context);
Log.d(TAG, "CastContext instantiated");
} catch (Exception e) {
Log.report(e);
castContext = null;
}
} else {
CrashReporter.report("CastContext FAILED to be instantiated : googlePlayServicesVerified() has failed."));
castContext = null;
}
}