Die YouTube-Android-Player-API löst "BadParcableException ClassNotFoundException beim Unmarshalling: asc" mit der neuen YouTube-Version aus

8

Archivierungsfehler für Entwickler der YouTube Android API-Bibliothek: siehe Android-youtube-api-Tag

Im Laufe der letzten anderthalb Wochen ist mir aufgefallen, dass diese seltsame BadParcelableException in unserer App stetig zunimmt und sich auf die neue YouTube-Version von Android beschränkt hat.

Dieser Absturz tritt auf, wenn Ihre App ein Youtube-Video spielt, Ihre App in den Hintergrund versetzt, das Beenden der Youtube-App erzwingt und Ihre App erneut startet. Absturz reproduzierbar auf Youtube Version 12.19.56. Auch getestet auf einer älteren YouTube-Version 12.05.21 und der Absturz war nicht da.

Stapelverfolgung:

%Vor%

Weitere Informationen:

%Vor%     
mco 06.06.2017, 00:42
quelle

5 Antworten

4

Das Problem beim Speichern und Wiederherstellen des Ansichtszustands. Youtube-App hat einen Bug- und Store-View-Status, der die Instanz der Klasse asc von youtube apk enthält. Also unsere App kann es nicht wiederherstellen, weil nichts über diese Klasse bekannt ist. Meine Lösung verhindert das Speichern des Ansichtszustands für YoutubePlayerView in YouTubePlayerSupportFragment beim nächsten Code:

%Vor%

Dieser Code sollte zu Ihrer Unterklasse von YouTubePlayerSupportFragment hinzugefügt werden. Diese Lösung entfernt den youtube player state nicht vom Bundle. So wird YouTube-Player erfolgreich wiederhergestellt.

    
xkor 19.06.2017, 18:44
quelle
0

Offensichtlich ist es ein Fehler der YouTube App. Ich würde Ihnen empfehlen, diesen Hack zu verwenden, um das Paket zu löschen, das vom Youtube-Client übergeben wurde, um diesen Parsing-Fehler zu umgehen.

%Vor%     
Fitz 06.06.2017 08:53
quelle
0

Verwenden Sie folgenden Code in Ihrem onCreate:

%Vor%

Der Fehler ist wahrscheinlich darauf zurückzuführen, dass der YouTube-Bibliothekscode benutzerdefiniertes Parcelable im Bundle gespeichert hat (YouTube-Bibliotheksklassen werden wahrscheinlich von Proguard verschleiert, daher komische Namen wie "asc").

Wenn der obige Vorschlag nicht funktioniert, folgen Sie den Anweisungen von @ Fitz und legen Sie das State Bundle ab. Versuchen Sie nicht, in onCreate (das wird nicht funktionieren) zu stören, stattdessen ist es am besten, onSaveInstanceState zu überschreiben, um Bundle.EMPTY zurückzugeben, wenn Ihre App ausgesetzt ist, während Sie eine Wiedergabe durchführen.

Beachten Sie, dass der betreffende Fehler in mehrfacher Hinsicht ziemlich kompliziert ist. Wenn Sie (oder die YouTube-App) verschachtelte Bundles in sich speichern, müssen diese auch über den richtigen ClassLoader-Satz verfügen ... Jemand sollte Google anweisen, einen gesunden Menschenverstand zu finden und Thread # getContextClassLoader innerhalb von Bundle zu verwenden, um dieses Problem ein für alle Mal zu beheben / p>     

user1643723 07.06.2017 01:42
quelle
0

Ich habe eine Lösung gefunden, die für mich funktioniert. In meiner onCreate -Methode erhalte ich den RuntimeException , der wegen des ClassNotFoundException im youtube player geworfen wird. Das Video verliert seinen Status. Durch Drücken von "Play" wird erneut gestartet. Ansonsten wie immer.

    
Ben Dauer 29.06.2017 12:01
quelle
-1

Ich habe gerade einen try catch-Block benutzt, der für mich funktioniert hat.

%Vor%     
mco 02.08.2017 22:46
quelle