Android Question [SOLVED] R8 crash with GoogleMaps 2.50 / GoogleMapsExtras 2.00: setZoomControlsEnabled

scsjc

Well-Known Member
Licensed User
Longtime User
Hi everyone,
While testing my app with #R8Optimizer: True, I encountered a crash when opening a Google Maps screen.
The libraries used are:
  • GoogleMaps 2.50
  • GoogleMapsExtras 2.00
With this combination, there appears to be an R8 compatibility issue involving one of these libraries. I have not tested them separately to isolate which one requires the additional rules.
The error occurs inside MapFragmentWrapper.onMapReady, even with my own ZoomControlsEnabled line commented out:

java.lang.RuntimeException: java.lang.NoSuchMethodException: s1.j.setZoomControlsEnabled [boolean]
at anywheresoftware.b4a.objects.MapFragmentWrapper$1.onMapReady(SourceFile:493)
at s1.k.zza(SourceFile:272)
at com.google.android.gms.internal.maps.zzb.onTransact(SourceFile:21)
at android.os.Binder.transact(Binder.java:1361)
at m140.baz.c:)com.google.android.gms.policy_maps_core_dynamite@[email protected]:8)
at com.google.maps.api.android.lib6.impl.ca.run:)com.google.android.gms.policy_maps_core_dynamite@[email protected]:17)
at android.os.Handler.handleCallback(Handler.java:1070)
at android.os.Handler.dispatchMessage(Handler.java:125)
at android.os.Looper.dispatchMessage(Looper.java:358)
at android.os.Looper.loopOnce(Looper.java:288)
at android.os.Looper.loop(Looper.java:392)
at android.app.ActivityThread.main(ActivityThread.java:10346)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:638)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:972)
Caused by: java.lang.NoSuchMethodException: s1.j.setZoomControlsEnabled [boolean]
at java.lang.Class.getMethod(Class.java:2942)
at java.lang.Class.getDeclaredMethod(Class.java:2921)
at anywheresoftware.b4a.objects.MapFragmentWrapper$1.onMapReady(SourceFile:468)
... 14 more


The following rules in the Manifest Editor solved the problem in my project:

B4X: Copy
AddProguardText(

    -keep class com.google.android.gms.maps.UiSettings { *; }
    -keep class com.google.android.gms.maps.GoogleMap { *; }
)


These rules preserve the classes and their members so that calls made through reflection can still find the expected methods.
After adding the rules, cleaning the project and rebuilding in Release mode with R8 enabled, the map works correctly.
 
Back
Top