Fixed
Status Update
Comments
[Deleted User] <[Deleted User]> #2
MediaBrowserCompat#getItem() is also crashing for the same exception.
I think this is because the class loader of caller app A is different from callee app B.
I think this is because the class loader of caller app A is different from callee app B.
ar...@google.com <ar...@google.com> #3
Can you please provide the below requested information to better understand the issue:
Steps to reproduce
Please provide source code or apk of a sample application to reproduce the issue.
Also kindly mention the steps to be followed for reproducing the issue with the given sample application.
Frequency
How frequently does this issue occur? (e.g 100% of the time, 10% of the time)
Expected output
Could you please explain the expected behavior.
Current output
Could you please explain the current behavior.
Steps to reproduce
Please provide source code or apk of a sample application to reproduce the issue.
Also kindly mention the steps to be followed for reproducing the issue with the given sample application.
Frequency
How frequently does this issue occur? (e.g 100% of the time, 10% of the time)
Expected output
Could you please explain the expected behavior.
Current output
Could you please explain the current behavior.
[Deleted User] <[Deleted User]> #4
Sorry for my misunderstanding that MediaBrowserCompat#getItem works correctly, but still MediaBrowserCompat#search does not work. It is 100% crashing for BadParcelableException caused by ClassNotFoundException.
Steps to reproduce:
OK I've created a sample repository here:https://github.com/KeithYokoma/mediabrowserbugs
You can download apks of app implementing MediaBrowserServiceCompat and app implementing MediaBrowserCompat from here:https://github.com/KeithYokoma/mediabrowserbugs/tree/master/apks
1. Download and install apks("MediaBrowserClient-debug.apk" and "MediaBrowserService-debug.apk")
2. Launch MediaBrowserClient app
3. You will see 3 buttons
4. When you press "SEARCH" button, app will crash for BadParcelableException.
Frequency:
100% crashing when calling MediaBrowserCompat#search from a different process
Expected output:
No crash, shows MediaItem#toString output in the logcat in the sample app
Current output:
03-30 12:21:33.869 24116-24116/? D/MainActivity: onConnected
03-30 12:21:34.684 24116-24116/io.github.keithyokoma.mediabrowserbugclient D/MainActivity: onClickSearch
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient E/Parcel: Class not found when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
java.lang.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2508)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2508)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient D/AndroidRuntime: Shutting down VM
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient E/AndroidRuntime: FATAL EXCEPTION: main
Process: io.github.keithyokoma.mediabrowserbugclient, PID: 24116
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
at android.os.Parcel.readParcelableCreator(Parcel.java:2536)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Thanks
Steps to reproduce:
OK I've created a sample repository here:
You can download apks of app implementing MediaBrowserServiceCompat and app implementing MediaBrowserCompat from here:
1. Download and install apks("MediaBrowserClient-debug.apk" and "MediaBrowserService-debug.apk")
2. Launch MediaBrowserClient app
3. You will see 3 buttons
4. When you press "SEARCH" button, app will crash for BadParcelableException.
Frequency:
100% crashing when calling MediaBrowserCompat#search from a different process
Expected output:
No crash, shows MediaItem#toString output in the logcat in the sample app
Current output:
03-30 12:21:33.869 24116-24116/? D/MainActivity: onConnected
03-30 12:21:34.684 24116-24116/io.github.keithyokoma.mediabrowserbugclient D/MainActivity: onClickSearch
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient E/Parcel: Class not found when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
java.lang.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2508)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2508)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient D/AndroidRuntime: Shutting down VM
03-30 12:21:34.701 24116-24116/io.github.keithyokoma.mediabrowserbugclient E/AndroidRuntime: FATAL EXCEPTION: main
Process: io.github.keithyokoma.mediabrowserbugclient, PID: 24116
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
at android.os.Parcel.readParcelableCreator(Parcel.java:2536)
at android.os.Parcel.readParcelable(Parcel.java:2462)
at android.os.Parcel.readParcelableArray(Parcel.java:2570)
at android.os.Parcel.readValue(Parcel.java:2419)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2732)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Thanks
ar...@google.com <ar...@google.com> #5
We have passed this defect on to the development team and will update this issue with more information as it becomes available.
dn...@google.com <dn...@google.com> #6
Issue is fixed and released in Target-Support-26.0.0-beta1 support lib.
ar...@google.com <ar...@google.com> #7
Issue is fixed and released in 25.4.0 version of support library also.
ve...@gmail.com <ve...@gmail.com> #8
Honor
Description
Android: 7.1.2 beta, 7.0
Replication condition:
1. The app A implements MediaBrowserServiceCompat#onSearch.
2. The app B implements calling MediaBrowserCompat#search and its callback.
3. The app A allows B to access A's MediaBrowserServiceCompat.
4. After calling MediaBrowserCompat#search from B and receive a result, BadParcelableException is thrown and app B crashes.
StackTrace in the logcat:
Parcel: Class not found when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
java.lang.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2507)
at android.os.Parcel.readParcelable(Parcel.java:2461)
at android.os.Parcel.readParcelableArray(Parcel.java:2569)
at android.os.Parcel.readValue(Parcel.java:2418)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6209)
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.ClassNotFoundException: android.support.v4.media.MediaBrowserCompat$MediaItem
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:1346)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:1406)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:400)
at android.os.Parcel.readParcelableCreator(Parcel.java:2507)
at android.os.Parcel.readParcelable(Parcel.java:2461)
at android.os.Parcel.readParcelableArray(Parcel.java:2569)
at android.os.Parcel.readValue(Parcel.java:2418)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6209)
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.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
AndroidRuntime: Shutting down VM
03-23 17:58:40.531 24380-24380/com.drivemode.mb_poc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.drivemode.mb_poc, PID: 24380
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v4.media.MediaBrowserCompat$MediaItem
at android.os.Parcel.readParcelableCreator(Parcel.java:2535)
at android.os.Parcel.readParcelable(Parcel.java:2461)
at android.os.Parcel.readParcelableArray(Parcel.java:2569)
at android.os.Parcel.readValue(Parcel.java:2418)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2717)
at android.os.BaseBundle.unparcel(BaseBundle.java:269)
at android.os.BaseBundle.containsKey(BaseBundle.java:341)
at android.support.v4.media.MediaBrowserCompat$SearchResultReceiver.onReceiveResult(MediaBrowserCompat.java:1997)
at android.support.v4.os.ResultReceiver$MyRunnable.run(ResultReceiver.java:60)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6209)
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)
Other comments:
1. MediaBrowserCompat#search works when calling it from app A(same app implementing MediaBrowserServiceCompat)