Fixed
Status Update
Comments
uc...@google.com <uc...@google.com> #2
Thank you for your feedback. Team may reach out for more feedback in reproducing or triaging this issue.
kr...@appertain.se <kr...@appertain.se> #3
If I disable R8, the issue is gone:
minifyEnabled false
I verified that my referenced libraries did not change since september (when I last tested it, I think):
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.mediarouter:mediarouter:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.preference:preference:1.1.0'
implementation 'com.android.billingclient:billing:2.0.3'
implementation 'com.google.android.gms:play-services-cast-framework:17.1.0'
I believe R8 in 3.5.3 does something that it didn't do in 3.5.1. Also, worth mentioning:
Also worth mentioning. My proguard-rules.pro contains this:
-keep class com.myapp.CustomMediaRouteActionProvider { *; }
-keep class com.myapp.CastOptionsProvider { *; }
So as you probably guessing, I have a custom MediaRouterActionProvider. This is solely (and quite annoying) to disable the volume button:
<item
android:id="@+id/menu_item_cast"
android:title="@string/cast_menu_title"
app:actionProviderClass="com.myapp.CustomMediaRouteActionProvider"
app:showAsAction="always" />
public class CustomMediaRouteActionProvider extends MediaRouteActionProvider {
public CustomMediaRouteActionProvider(Context context) {
super(context);
setDialogFactory(new CustomMediaRouteDialogFactory());
}
}
public class CustomMediaRouteDialogFactory extends MediaRouteDialogFactory {
@NonNull
@Override
public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() {
return new CustomMediaRouteChooserDialogFragment();
}
@NonNull
@Override
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment() {
return new CustomMediaRouteControllerDialogFragment();
}
}
public class CustomMediaRouteControllerDialogFragment extends MediaRouteControllerDialogFragment {
@Override
public MediaRouteControllerDialog onCreateControllerDialog(Context context, Bundle savedInstanceState) {
MediaRouteControllerDialog controllerDialog = new MediaRouteControllerDialog(context);
controllerDialog.setVolumeControlEnabled(false);
return controllerDialog;
}
}
minifyEnabled false
I verified that my referenced libraries did not change since september (when I last tested it, I think):
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.mediarouter:mediarouter:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.preference:preference:1.1.0'
implementation 'com.android.billingclient:billing:2.0.3'
implementation 'com.google.android.gms:play-services-cast-framework:17.1.0'
I believe R8 in 3.5.3 does something that it didn't do in 3.5.1. Also, worth mentioning:
Also worth mentioning. My proguard-rules.pro contains this:
-keep class com.myapp.CustomMediaRouteActionProvider { *; }
-keep class com.myapp.CastOptionsProvider { *; }
So as you probably guessing, I have a custom MediaRouterActionProvider. This is solely (and quite annoying) to disable the volume button:
<item
android:id="@+id/menu_item_cast"
android:title="@string/cast_menu_title"
app:actionProviderClass="com.myapp.CustomMediaRouteActionProvider"
app:showAsAction="always" />
public class CustomMediaRouteActionProvider extends MediaRouteActionProvider {
public CustomMediaRouteActionProvider(Context context) {
super(context);
setDialogFactory(new CustomMediaRouteDialogFactory());
}
}
public class CustomMediaRouteDialogFactory extends MediaRouteDialogFactory {
@NonNull
@Override
public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() {
return new CustomMediaRouteChooserDialogFragment();
}
@NonNull
@Override
public MediaRouteControllerDialogFragment onCreateControllerDialogFragment() {
return new CustomMediaRouteControllerDialogFragment();
}
}
public class CustomMediaRouteControllerDialogFragment extends MediaRouteControllerDialogFragment {
@Override
public MediaRouteControllerDialog onCreateControllerDialog(Context context, Bundle savedInstanceState) {
MediaRouteControllerDialog controllerDialog = new MediaRouteControllerDialog(context);
controllerDialog.setVolumeControlEnabled(false);
return controllerDialog;
}
}
kr...@appertain.se <kr...@appertain.se> #4
One more thing. The crash occurs when directly after I have selected the Chromecast device. And adding the following to proguard-rules.pro fixes the problem:
-keep class com.google.android.gms.** { *; }
Still, I don't understand why it worked before - without this "keep".
-keep class com.google.android.gms.** { *; }
Still, I don't understand why it worked before - without this "keep".
go...@gmail.com <go...@gmail.com> #5
I just ran into this issue and it seems to only crash on a specific version of the google play services. All my stack traces are from 19.8.31 (120408-284611645). Casting works fine on a few of my devices but they are all running different versions of play services (still 19.8.31 but the other number is different)
I can also confirm adding -keep class com.google.android.gms.** { *; } fixes the issue
I can also confirm adding -keep class com.google.android.gms.** { *; } fixes the issue
ag...@google.com <ag...@google.com> #6
Thanks for the report!
We will investigate. This could be caused by R8 being too aggressive or by the google play services client library shipping keep rules that are insufficient.
We will investigate. This could be caused by R8 being too aggressive or by the google play services client library shipping keep rules that are insufficient.
mk...@google.com <mk...@google.com> #7
This seems to be proto related - at least from what can be seen from the stack-trace. Can I ask you to put in -printconfiguration <file_name> to see that the following lines is in fact added (for version 18)
# We keep all fields for every generated proto file as the runtime uses
# reflection over them that ProGuard cannot detect. Without this keep
# rule, fields may be removed that would cause runtime failures.
-keepclassmembers class * extends com.google.android.gms.internal.cast.zzlf {
<fields>;
}
If not, then try adding the above to see if this resolves this issue.
If the keepclassmembers is already there, you could probably narrow the -keep a bit from -keep class com.google.android.gms.** { *; } to -keep class com.google.android.gms.internal.cast.** { *; }
I am working on a local reproduction. Is it possible for either you to share an android project with a reproduction that would allow me to bisect the changes to R8 to figure out the problem?
# We keep all fields for every generated proto file as the runtime uses
# reflection over them that ProGuard cannot detect. Without this keep
# rule, fields may be removed that would cause runtime failures.
-keepclassmembers class * extends com.google.android.gms.internal.cast.zzlf {
<fields>;
}
If not, then try adding the above to see if this resolves this issue.
If the keepclassmembers is already there, you could probably narrow the -keep a bit from -keep class com.google.android.gms.** { *; } to -keep class com.google.android.gms.internal.cast.** { *; }
I am working on a local reproduction. Is it possible for either you to share an android project with a reproduction that would allow me to bisect the changes to R8 to figure out the problem?
ha...@gmail.com <ha...@gmail.com> #8
This is what I have in build.gradle:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Then, if I explicitly add only that "keepclassmembers" part to "proguard-rules.pro", the app still crashes. If I try your second suggestion, it works.
Not sure where to put this "printconfiguration" command?
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Then, if I explicitly add only that "keepclassmembers" part to "proguard-rules.pro", the app still crashes. If I try your second suggestion, it works.
Not sure where to put this "printconfiguration" command?
mk...@google.com <mk...@google.com> #9
Thank you for trying out the -keepclassmembers rule. Some libraries will include keep rules and they can be hard to figure out - one trick is to just print all of them to a file. The -printconfiguration is a proguard command that will do just that.
However, I was able to make a local reproduction of the issue that fails with a similar error (although not entirely the same):
java.lang.NullPointerException: Attempt to invoke interface method 'void c.c.a.b.h.b.n5.i()' on a null object reference
at c.c.a.b.h.b.c6.a(Unknown Source:4)
at c.c.a.b.h.b.r6.b(Unknown Source:49)
at c.c.a.b.h.b.e5$a.h(:3)
at c.c.a.b.h.b.e5$a.i(:1)
at c.c.a.b.h.b.v.a(Unknown Source:4)
at c.c.a.b.c.r.q0.a(:71)
at c.c.a.b.h.b.a.onTransact(Unknown Source:22)
at android.os.Binder.transact(Binder.java:997)
I will try to figure out what is removed and should not be. Will check back here when I have more answers.
However, I was able to make a local reproduction of the issue that fails with a similar error (although not entirely the same):
java.lang.NullPointerException: Attempt to invoke interface method 'void c.c.a.b.h.b.n5.i()' on a null object reference
at c.c.a.b.h.b.c6.a(Unknown Source:4)
at c.c.a.b.h.b.r6.b(Unknown Source:49)
at c.c.a.b.h.b.e5$a.h(:3)
at c.c.a.b.h.b.e5$a.i(:1)
at c.c.a.b.h.b.v.a(Unknown Source:4)
at c.c.a.b.c.r.q0.a(:71)
at c.c.a.b.h.b.a.onTransact(Unknown Source:22)
at android.os.Binder.transact(Binder.java:997)
I will try to figure out what is removed and should not be. Will check back here when I have more answers.
mk...@google.com <mk...@google.com> #10
I was able to find a small static type-error related to interfaces in the cast framework when creating my reproduction. The static error is probably never thrown in ART or maybe in some specific circumstances, in classes that are not really exposed, so that is why the problem is not occurring in D8.
Can I ask you to try and add the following to your keep rules?
-keep class com.google.android.gms.internal.cast.zzlk
This is enough to make things work in my demo app and may be sufficient for you as well. If not, try using:
-keep class * implements com.google.android.gms.internal.cast.zzlp
I am very interested to hear if any of the above solves your problems.
Can I ask you to try and add the following to your keep rules?
-keep class com.google.android.gms.internal.cast.zzlk
This is enough to make things work in my demo app and may be sufficient for you as well. If not, try using:
-keep class * implements com.google.android.gms.internal.cast.zzlp
I am very interested to hear if any of the above solves your problems.
ap...@google.com <ap...@google.com> #11
Project: r8
Branch: master
commit 537d711fb733af80445dcf523dff772ddd844c3d
Author: Søren Gjesse <sgjesse@google.com>
Date: Tue Jan 07 17:24:17 2020
Add a test for b/146957343
Bug: 146957343
Change-Id: I326d780693d5512bc0ec71981ba5c9c94fa9c71c
M src/main/java/com/android/tools/r8/graph/DexType.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
A src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/B146957343.java
https://r8-review.googlesource.com/47139
Branch: master
commit 537d711fb733af80445dcf523dff772ddd844c3d
Author: Søren Gjesse <sgjesse@google.com>
Date: Tue Jan 07 17:24:17 2020
Add a test for
Bug: 146957343
Change-Id: I326d780693d5512bc0ec71981ba5c9c94fa9c71c
M src/main/java/com/android/tools/r8/graph/DexType.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
A src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/B146957343.java
ap...@google.com <ap...@google.com> #12
Project: r8
Branch: master
commit 17cda1c96d0edeb19878826f4a7483bc310ebad7
Author: Søren Gjesse <sgjesse@google.com>
Date: Wed Jan 08 15:53:03 2020
Turn off uninstantiated type optimization for interfaces
Bug: 146957343
Bug: 147153808
Change-Id: I4b4423ee74e806361153644ff27b78dac9e51a8e
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
M src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
M src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
https://r8-review.googlesource.com/47160
Branch: master
commit 17cda1c96d0edeb19878826f4a7483bc310ebad7
Author: Søren Gjesse <sgjesse@google.com>
Date: Wed Jan 08 15:53:03 2020
Turn off uninstantiated type optimization for interfaces
Bug: 146957343
Bug: 147153808
Change-Id: I4b4423ee74e806361153644ff27b78dac9e51a8e
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
M src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
M src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
ap...@google.com <ap...@google.com> #13
Project: r8
Branch: 1.6
commit 59df0f57cf3a3573dd04a0fa0530c2d56ff04ec1
Author: Søren Gjesse <sgjesse@google.com>
Date: Thu Jan 09 11:01:24 2020
Version 1.6.57
Cherry-pick: Testing utilities for transforming classfiles. (with modifications)
CL:https://r8-review.googlesource.com/c/r8/+/45621
Cherry-pick: Add a test for b/146957343 (with modifications)
CL:https://r8-review.googlesource.com/c/r8/+/47139
Cherry-pick: Turn off uninstantiated type optimization for interfaces
CL:https://r8-review.googlesource.com/c/r8/+/47160
Bug: 146957343
Bug: 147153808
Change-Id: I66544813e8457f2811efa18a801f0891acd61fb9
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/graph/DexType.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
M src/test/java/com/android/tools/r8/TestBase.java
M src/test/java/com/android/tools/r8/TestRunResult.java
A src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/B146957343.java
M src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
M src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
A src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
A src/test/java/com/android/tools/r8/transformers/ClassTransformer.java
A src/test/java/com/android/tools/r8/transformers/MethodTransformer.java
https://r8-review.googlesource.com/47163
Branch: 1.6
commit 59df0f57cf3a3573dd04a0fa0530c2d56ff04ec1
Author: Søren Gjesse <sgjesse@google.com>
Date: Thu Jan 09 11:01:24 2020
Version 1.6.57
Cherry-pick: Testing utilities for transforming classfiles. (with modifications)
CL:
Cherry-pick: Add a test for
CL:
Cherry-pick: Turn off uninstantiated type optimization for interfaces
CL:
Bug: 146957343
Bug: 147153808
Change-Id: I66544813e8457f2811efa18a801f0891acd61fb9
M src/main/java/com/android/tools/r8/Version.java
M src/main/java/com/android/tools/r8/graph/DexProgramClass.java
M src/main/java/com/android/tools/r8/graph/DexType.java
M src/main/java/com/android/tools/r8/utils/InternalOptions.java
M src/test/java/com/android/tools/r8/TestBase.java
M src/test/java/com/android/tools/r8/TestRunResult.java
A src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/B146957343.java
M src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
M src/test/java/com/android/tools/r8/shaking/annotations/ReflectiveAnnotationUseTest.java
A src/test/java/com/android/tools/r8/transformers/ClassFileTransformer.java
A src/test/java/com/android/tools/r8/transformers/ClassTransformer.java
A src/test/java/com/android/tools/r8/transformers/MethodTransformer.java
sg...@google.com <sg...@google.com> #14
We now have a fix for Android Studio 3.6. You should be able to get by adding the following to your top level build.gradle file. With this version the keep rule should no longer be needed.
buildscript {
repositories {
maven {
url 'http://storage.googleapis.com/r8-releases/raw '
}
}
dependencies {
classpath 'com.android.tools:r8:1.6.57' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
buildscript {
repositories {
maven {
url '
}
}
dependencies {
classpath 'com.android.tools:r8:1.6.57' // Must be before the Gradle Plugin for Android.
classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
}
}
an...@google.com <an...@google.com> #15
[Deleted User] <[Deleted User]> #16
still I'm facing issue, crash when user press 'stop cast' button.
java.lang.NullPointerException: Attempt to invoke virtual method 'aby wr.t()' on a null object reference
at wr.i(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):3)
at wb.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):14)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.cast.framework.zzal.zzl(com.google.android.gms:play-services-cast-framework@@21.1.0:3)
at com.google.android.gms.cast.framework.Session.notifySessionEnded(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.CastSession.end(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at com.google.android.gms.cast.framework.zzaz.zzd(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.zzau.zza(com.google.android.gms:play-services-cast-framework@@21.1.0:20)
at com.google.android.gms.internal.cast.zzb.onTransact(com.google.android.gms:play-services-cast@@21.1.0:3)
at android.os.Binder.transact(Binder.java:1052)
at pf.P(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):2)
at wj.h(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):0)
at wr.w(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):6)
at xe.g(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at xc.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):7)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.internal.cast.zzt.zzk(com.google.android.gms:play-services-cast-framework@@21.1.0:5)
at com.google.android.gms.internal.cast.zzae.onRouteUnselected(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:3910)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:3832)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:250)
at android.app.ActivityThread.main(ActivityThread.java:7851)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
java.lang.NullPointerException: Attempt to invoke virtual method 'aby wr.t()' on a null object reference
at wr.i(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):3)
at wb.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):14)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.cast.framework.zzal.zzl(com.google.android.gms:play-services-cast-framework@@21.1.0:3)
at com.google.android.gms.cast.framework.Session.notifySessionEnded(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.CastSession.end(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at com.google.android.gms.cast.framework.zzaz.zzd(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.zzau.zza(com.google.android.gms:play-services-cast-framework@@21.1.0:20)
at com.google.android.gms.internal.cast.zzb.onTransact(com.google.android.gms:play-services-cast@@21.1.0:3)
at android.os.Binder.transact(Binder.java:1052)
at pf.P(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):2)
at wj.h(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):0)
at wr.w(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):6)
at xe.g(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at xc.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):7)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.internal.cast.zzt.zzk(com.google.android.gms:play-services-cast-framework@@21.1.0:5)
at com.google.android.gms.internal.cast.zzae.onRouteUnselected(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:3910)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:3832)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:250)
at android.app.ActivityThread.main(ActivityThread.java:7851)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
[Deleted User] <[Deleted User]> #17
still crash when user press 'stop cast' button
java.lang.NullPointerException: Attempt to invoke virtual method 'aby wr.t()' on a null object reference
at wr.i(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):3)
at wb.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):14)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.cast.framework.zzal.zzl(com.google.android.gms:play-services-cast-framework@@21.1.0:3)
at com.google.android.gms.cast.framework.Session.notifySessionEnded(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.CastSession.end(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at com.google.android.gms.cast.framework.zzaz.zzd(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.zzau.zza(com.google.android.gms:play-services-cast-framework@@21.1.0:20)
at com.google.android.gms.internal.cast.zzb.onTransact(com.google.android.gms:play-services-cast@@21.1.0:3)
at android.os.Binder.transact(Binder.java:1052)
at pf.P(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):2)
at wj.h(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):0)
at wr.w(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):6)
at xe.g(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at xc.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):7)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.internal.cast.zzt.zzk(com.google.android.gms:play-services-cast-framework@@21.1.0:5)
at com.google.android.gms.internal.cast.zzae.onRouteUnselected(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:3910)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:3832)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:250)
at android.app.ActivityThread.main(ActivityThread.java:7851)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
java.lang.NullPointerException: Attempt to invoke virtual method 'aby wr.t()' on a null object reference
at wr.i(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):3)
at wb.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):14)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.cast.framework.zzal.zzl(com.google.android.gms:play-services-cast-framework@@21.1.0:3)
at com.google.android.gms.cast.framework.Session.notifySessionEnded(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.CastSession.end(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at com.google.android.gms.cast.framework.zzaz.zzd(com.google.android.gms:play-services-cast-framework@@21.1.0:1)
at com.google.android.gms.cast.framework.zzau.zza(com.google.android.gms:play-services-cast-framework@@21.1.0:20)
at com.google.android.gms.internal.cast.zzb.onTransact(com.google.android.gms:play-services-cast@@21.1.0:3)
at android.os.Binder.transact(Binder.java:1052)
at pf.P(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):2)
at wj.h(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):0)
at wr.w(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):6)
at xe.g(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at xc.a(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):7)
at pg.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@223017081@22.30.17 (150400-0):4)
at android.os.Binder.transact(Binder.java:1052)
at com.google.android.gms.internal.cast.zza.zzc(com.google.android.gms:play-services-cast@@21.1.0:2)
at com.google.android.gms.internal.cast.zzt.zzk(com.google.android.gms:play-services-cast-framework@@21.1.0:5)
at com.google.android.gms.internal.cast.zzae.onRouteUnselected(com.google.android.gms:play-services-cast-framework@@21.1.0:4)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.invokeCallback(MediaRouter.java:3910)
at androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler.handleMessage(MediaRouter.java:3832)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:250)
at android.app.ActivityThread.main(ActivityThread.java:7851)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
mk...@google.com <mk...@google.com> #18
This is a 2,5 year old bug and I assume both the cast library and R8 code as moved quite a bit since then. Please create a new issue where you describe what version of AGP/R8 you use and if possible share a reproduction of the issue.
Description
Build #AI-191.8026.42.35.6010548, built on November 15, 2019
JRE: 1.8.0_202-release-1483-b03 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0
My Cast app stopped working some time after upgrading Android Studio 3.5 to 3.5.x (haven't tested my app since 3.5.0). I did not change anything in my code, except updating some libraries (including Cast). I decided to rebuild my app and re-test it. Now, when I press the Cast button, it crashes. But only in Release mode, so I'm quite convinced that it is related to R8.
As can be seen below, some object "com.google.android.gms.internal.cast.zzka" seems to be null. The exception (after some manual re-mapping) tells us this:
java.lang.NullPointerException: Attempt to write to field 'boolean com.google.android.gms.internal.cast.zzka.zzbio' on a null object reference
I'm using the latest version of the Cast Framework, but I verified the bug in 17.1.0 too.
implementation 'com.google.android.gms:play-services-cast-framework:18.0.0'
And in my manifest.xml:
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.myapp.CastOptionsProvider" />
Targeting SDK v29. I have enabled R8 full mode, but disabling it does not fix the problem. Since there were no relevant code changes since Android Studio 3.5 I'm suspecting one of the minor updates to be the culprit. Perhaps something was changed in R8?
Here are some relevant entries from the mapping file:
com.google.android.gms.internal.cast.zzka -> c.c.a.b.h.b.h5:
boolean zzbio -> b
...
com.google.android.gms.internal.cast.zzmd -> c.c.a.b.h.b.z6:
1:1:void <init>():0:0 -> <init>
1:1:void <init>(com.google.android.gms.internal.cast.zzmb):0 -> <init>
1:1:void com.google.android.gms.internal.cast.zzka.zzhx():0:0 -> a
com.google.android.gms.internal.cast.zzms -> c.c.a.b.h.b.m7:
com.google.android.gms.internal.cast.zznw zzbpg -> j
java.lang.Object[] zzbot -> b
com.google.android.gms.internal.cast.zzba -> c.c.a.b.h.b.s:
com.google.android.gms.internal.cast.zzav zzng -> a
com.google.android.gms.cast.framework.zzag -> c.c.a.b.c.x.c0:
com.google.android.gms.cast.framework.SessionManagerListener zzlo -> a
com.google.android.gms.internal.cast.zza -> c.c.a.b.h.b.a:
com.google.android.gms.internal.cast.zzaq -> c.c.a.b.h.b.i:
com.google.android.gms.cast.internal.Logger zzu -> b
com.google.android.gms.internal.cast.zzag zzmt -> a
androidx.mediarouter.media.MediaRouter$GlobalMediaRouter$CallbackHandler -> b.p.n.s:
androidx.mediarouter.media.MediaRouter$GlobalMediaRouter this$0 -> b
java.util.ArrayList mTempCallbackRecords -> a
And the entire exception:
java.lang.NullPointerException: Attempt to write to field 'boolean c.c.a.b.h.b.h5.b' on a null object reference
at c.c.a.b.h.b.z6.a(:1)
at c.c.a.b.h.b.m7.b(Unknown Source:48)
at c.c.a.b.h.b.d6$a.f(:3)
at c.c.a.b.h.b.d6$a.g(:1)
at c.c.a.b.h.b.u.a(Unknown Source:4)
at c.c.a.b.h.b.s.a(:19)
at c.c.a.b.c.x.c0.a(:18)
at c.c.a.b.h.b.a.onTransact(Unknown Source:22)
at android.os.Binder.transact(Binder.java:914)
at jx.b(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):14)
at vx.a(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):39)
at wj.b(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):50)
at wk.a(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):42)
at wv.c(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):21)
at wt.a(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):11)
at jy.onTransact(:com.google.android.gms.dynamite_dynamitemodulesc@19831081@19.8.31 (120400-0):5)
at android.os.Binder.transact(Binder.java:914)
at c.c.a.b.h.b.r.b(Unknown Source:7)
at c.c.a.b.h.b.i.d(:4)
at b.p.n.s.a(:2)
at b.p.n.s.handleMessage(:6)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
I'll try to pinpoint the error even more. Perhaps I will somehow be able to reproduce it in a sample project. But please give me some hints. What could have gone wrong just by updating Android Studio?