2017-03-13 53 views
3

我嘗試配置Chromecast,但得到RuntimeException並且不理解原因。下面是從面料日誌:RuntimeException(Chromecast)

致命異常:了java.lang.RuntimeException:無法啓動活動 ComponentInfo {...} .activity.TVActivityPhone: 了java.lang.RuntimeException: com.google.android .gms.dynamite.DynamiteModule $ zza:遠程加載 失敗。找不到本地回退。 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2747) 在android.app.ActivityThread.access $ 900(ActivityThread.java:187) 在android.app.ActivityThread $ h.handleMessage(ActivityThread.java:1584) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:194) at java.lang.reflect.Method.invoke(Method.java:372) at android.app.ActivityThread.main(ActivityThread.java:5877) at java.lang.reflect.Method.invoke(Method.java) 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:遠程加載 失敗。找不到本地回退。

這裏是我的代碼:

protected void configureCast() { 
     mCastContext = CastContext.getSharedInstance(this); // here I've got RuntimeException 
     if(mCastContext != null) mCastSession = mCastContext.getSessionManager().getCurrentCastSession(); 
     mSessionManagerListener = new CastSessionManagerListener(this); 
     mSessionManagerListener.setCastConnectionListener(mCastConnectionListener); 
    } 

這裏的build.gradle:

compile 'com.google.android.gms:play-services-gcm:10.2.0' 
    compile 'com.google.android.gms:play-services-analytics:10.2.0' 
    compile 'com.google.android.gms:play-services-location:10.2.0' 
    compile 'com.google.android.gms:play-services-cast-framework:10.2.0' 

任何幫助嗎?

+0

確保您在清單文件正確初始化,您的活動。你可以檢查這個[線程](http://stackoverflow.com/questions/16584049/android-fatal-exception-main-java-lang-runtimeexception-unable-to-start-activi)你錯誤的可能原因。另外,也許你正在使用導致內存問題的大圖片。您必須按照指定的縮小圖像[這裏](http://stackoverflow.com/questions/28525268/fatal-exception-main-java-lang-runtimeexception-unable-to-start-activity-a-lot)。 – abielita

+1

你還在遇到這個問題嗎?在將compat庫更新至v26.x – user1026605

+0

@ user1026605後,我開始遇到同樣的問題,您是否仍然遇到此問題? – Sabrish

回答

5

首先,它與Why I get this error when on google map "Failed to load DynamiteLoader: java.lang.ClassNotFoundException: Didn't find class?中描述的錯誤項目配置無關。


有一天,我得到了一個峯值(〜1300崩潰以1天)在崩潰的面料與 com.google.android.gms.dynamite.DynamiteModule$zza: Remote load failed. No local fallbackcom.google.android.gms.dynamite.DynamiteModule$zzc: No acceptable module found. Local version is 0 and remote version is 0例外。

從第一次看,我不清楚爲什麼會發生這種情況,因爲在那段時間我沒有發送任何應用程序的更新。經過深入調查(總共幾天)之後,我發現問題是由於Google Play服務版本和過時的Google Cast SDK之間的兼容性不兼容導致的

我使用的Android應用程序10.2.4 Google Cast SDK版本,此版本與某些Google Play服務版本不兼容。 我發現11.3.02 (480-161239932)版Google Play服務不兼容10.2.4 Google Cast SDK。有(肯定的)其他版本的Google Play服務與Google Cast SDK庫不兼容,但我找到了一個,這足以用於測試和進一步修復。

在設備上安裝Google Play服務版本11.3.02 (480-161239932)我的應用程序在啓動時立即崩潰。值得注意的是,我發現我的設備上的其他應用程序在啓動時立即崩潰,並且堆棧跟蹤是相同的

修正了崩潰

修復很簡單,我 - 我不得不更新谷歌Play服務10.2.4至11.4.2, 特別play-services-cast-frameworkplay-services-adsfirebase-corefirebase-messaging


穗狀花序歷史在面料:

  • 9月25日(〜400個崩潰),第一穗
  • 9月27日(〜200個崩潰)
  • 9月29日(〜140個崩潰)
  • 10月8日(〜1300次死亡)

10月8日後崩潰沒有那麼重要(每天大約10-20次崩潰),也沒有觀察到更多的峯值。這意味着用戶更新的Google Play服務和應用程序在啓動時不會崩潰。

一旦我更新了Google Play服務版本並且用戶更新到新版本的應用程序 - 崩潰消失(每天〜1-2次崩潰)。

爲什麼這個碰撞發生

正如你可能知道,谷歌播放服務在後臺自動更新說明。這意味着有一天用戶可以收到與應用程序和應用程序中使用的Google Cast SDK不兼容的Google Play服務更新(100%)。

從我的經驗來看,它適用於Google Cast SDK,但其他庫(沒有證據)可能會出現這種情況。

當您從Google Cast SDK調用任何方法時,應用程序崩潰。我在我的應用程序中評論了依賴Google Cast SDK和應用程序始終崩潰的不同位置。

詳細指南

如果有人好奇如何模仿這種碰撞,這裏的詳細指南。

  • 首先,我們需要卸載的谷歌Play服務的現有版本。這可以通過「Google Play Services」應用程序信息屏幕實現 downgrade of google play services
  • 在Android設備(apkmirror link)上安裝Google Play Services的11.3.02版(480-161239932)版本。

    adb install -r com.google.android.gms_11.3.02_(480-161239932)-11302480_minAPI23(x86,x86_64)(nodpi)_apkmirror.com.apk

  • 開放的應用和觀察員應用程序崩潰時,谷歌演員SDK訪問。

墜毀的第二到來

我認爲我有固定的更新墜毀谷歌播放服務,但沉默後幾個星期我已經得到通知碰撞與同一堆棧跟蹤復出。

經過一番調查(幾天後),我能夠重現這個問題。這裏有一個不幸的消息 - 我對這起事故無能爲力:sad_face:或者至少我還沒有找到優雅的解決方案。

好消息是,重新出現的崩潰出現是非常罕見的(每月〜1-2次崩潰)。

Google Play服務自動更新或強制卸載(不太可能)強制停止打開的應用程序以使Play服務更新生效。這是一個無法控制的過程,這意味着Android操作系統可以隨時安裝Google Play服務。 如果用戶打開應用程序並且Google Play服務安裝在某個時候完成,則應用程序將被系統殺死,並且用戶需要重新打開該應用程序。當應用程序被系統殺死時,我們可以在日誌中看到與第一種情況下完全相同的堆棧跟蹤。 很難重現,而且發生在我身上的只有幾次。 但是這種情況更可能是因爲Google Play服務正在經常更新。

雖然有一種方法來重現此崩潰(在現實生活中可能性較低) - 「從設備中刪除Google Play服務更新」。它產生相同的堆棧跟蹤。

所以基本上,我們需要開始刪除Google Play服務更新,並快速(我的意思是非常快)打開我們的應用程序。如果我們成功了,系統將在開始時終止該應用程序,因爲Google Play服務已被移除,系統會終止應用程序。

而這裏的堆棧跟蹤:

FATAL EXCEPTION: main 
Process: XXX, PID: 26149 
java.lang.RuntimeException: Unable to start activity ComponentInfo{XXX/XXX.SomeActivity}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class fragment 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2733) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2819) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1532) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6321) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class fragment 
Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class fragment 
Caused by: java.lang.RuntimeException: com.google.android.gms.dynamite.DynamiteModule$zzc: No acceptable module found. Local version is 0 and remote version is 0. 
    at com.google.android.gms.internal.zzavl.zzbp(Unknown Source) 
    at com.google.android.gms.internal.zzavl.zza(Unknown Source) 
    at com.google.android.gms.cast.framework.CastContext.<init>(Unknown Source) 
    at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source) 
    at com.google.android.gms.cast.framework.media.uicontroller.UIMediaController.<init>(Unknown Source) 
    at com.google.android.gms.cast.framework.media.widget.MiniControllerFragment.onCreateView(Unknown Source) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:2343) 
    at android.support.v4.app.FragmentManagerImpl.ensureInflatedFragmentView(FragmentManager.java:1645) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1390) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1640) 
    at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1896) 
    at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3673) 
    at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:111) 
    at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:331) 
    at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:39) 
    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:65) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:777) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
    at XXX.SomeActivity.setContentView(SomeActivity:XXX) 
    at XXX.SomeActivity.onCreate(SomeActivity:XXX) 
    at android.app.Activity.performCreate(Activity.java:6760) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)