2016-11-13 31 views
1

У меня такая же проблема, как у Android: Cast SDK v3 Crashing in Release build only. Основное различие заключается в том, что мой проект делает это в то время как я просто отладки и делает это на этой линииAndroid: сбой при настройке кнопки медиа-маршрута

CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), mMediaRouteButton); 

Я пытался сделать все мои переменные общественности, но это ничего не делать. Полный код

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mMediaRouteButton = (MediaRouteButton) findViewById(R.id.media_route_button); 
    CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), mMediaRouteButton); 

    mCastContext = CastContext.getSharedInstance(this); 

    mSelector = new MediaRouteSelector.Builder() 
      // These are the framework-supported intents 
      .addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO) 
      .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO) 
      .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) 
      .build(); 
    mMediaRouter = MediaRouter.getInstance(this); 
} 

Также я считаю, что стоит отметить, что этот код работал, и я не могу за жизнь мне понять, что заставило его прекратить работу. Насколько я могу судить, он перестает работать, когда я аннулировал кеш в Android Studio. Это ошибка, я получаю

java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.package/mypackage.package.MainActivity}: java.lang.IllegalStateException: Failed to initialize CastContext. 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
    Caused by: java.lang.IllegalStateException: Failed to initialize CastContext. 
    at com.google.android.gms.cast.framework.CastContext.zzbb(Unknown Source) 
    at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source) 
    at com.google.android.gms.cast.framework.CastButtonFactory.setUpMediaRouteButton(Unknown Source) 
    at mypackage.package.MainActivity.onCreate(MainActivity.java:51) 
    at android.app.Activity.performCreate(Activity.java:6664) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  
    at android.app.ActivityThread.-wrap12(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6077)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  
    Caused by: java.lang.IllegalAccessException: java.lang.Class<mypackage.package.CastOptionsProvider> is not accessible from java.lang.Class<com.google.android.gms.cast.framework.CastContext> 
    at java.lang.Class.newInstance(Native Method) 
    at com.google.android.gms.cast.framework.CastContext.zzbb(Unknown Source)  
    at com.google.android.gms.cast.framework.CastContext.getSharedInstance(Unknown Source)  
    at com.google.android.gms.cast.framework.CastButtonFactory.setUpMediaRouteButton(Unknown Source)  
    at mypackage.package.MainActivity.onCreate(MainActivity.java:51)  
    at android.app.Activity.performCreate(Activity.java:6664)  
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)  
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  
    at android.app.ActivityThread.-wrap12(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6077)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

ответ

2

Это было зафиксировано путем общественности CastOptionsProvider. Я не знаю, почему эта проблема возникла, потому что она работала нормально, когда она не была общедоступной, пока она этого не сделала. Я не касался CastOptionsProvider в сборке, где он начал провал. Мой CastOptionsProvider теперь выглядит как этот

public class CastOptionsProvider implements OptionsProvider { 
@Override 
public CastOptions getCastOptions(Context appContext) { 
    CastOptions castOptions = new CastOptions.Builder() 
      .setReceiverApplicationId(appContext.getString(R.string.app_id)) 
      .build(); 
    return castOptions; 
} 
@Override 
public List<SessionProvider> getAdditionalSessionProviders(Context context) { 
    return null; 
} 
} 
+0

У меня был такой же опыт: 'CastOptionsProvider' всегда был закрытым для пакета, и приложение запускалось без проблем. Затем однажды я начал видеть тот же «Не удалось инициализировать CastContext» «RuntimeException», на который ссылается этот пост. Публикация решения «CastOptionsProvider» решила его. –

2

Там может быть вопрос о том, как вы инициализации СМИ CastContext, чтобы правильно инициализировать CastContext, приложение должно иметь орудия OptionsProvider интерфейс:

пакет com.example .приложение;

public class CastOptionsProvider implements OptionsProvider { 
    @Override 
    public CastOptions getCastOptions(Context appContext) { 
     ... 
    } 
} 

и указать его полное имя класса в AndroidManifest.xml с ключом OPTIONS_PROVIDER_CLASS_NAME_KEY:

... 
    <meta-data 
     android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" 
     android:value="com.example.app.CastOptionsProvider" /> 
    ... 

Примечание: Все публичные методы должны вызываться из главного потока.

Я сделал некоторые исследования и нашел этот связанную SO билет, который обсудить, как инициализировать CastContext: How to initialize CastContext outside of onCreate method

+0

Да у меня уже есть этот код, и я не думаю, что это инициализация CastContext что выходит из строя. Авария происходит в этой строке CastButtonFactory.setUpMediaRouteButton (getApplicationContext(), mMediaRouteButton); Я получил свой код из [link] (https://developers.google.com/cast/docs/android_sender_integrate), поэтому он должен работать, и это произошло до тех пор, пока я не аннулировал кеши в студии Android. –

2

Если это происходит только в релизе buildtype то связано с Proguard. Пожалуйста, добавьте класс CastOptionsProvider в файл Proguard и перепроверить

-keep class abc.xyz.videocast.CastOptionsProvider { *; } 

Для большей безопасности этих классы также могут быть добавлены

-keep class android.support.** { *; } 
-keep class com.google.** { *; } 
+1

Ты сделал мой день! Я просмотрел весь код, но окончательным решением было добавить эту строку в файл proguard. '-keep class abc.xyz.videocast.CastOptionsProvider {*; } ' – user4500