Signed APK crashes, unsigned not, when using Google Maps API v2

232 Views Asked by At

In my android app i use the Google Maps API v2 to show a map with markers on in. It works perfect with local debug and release versions. As soon as i build a signed APK the app crashes when a map should be shown. It crashes only if i authorize the SHA1 of the signed APK for API access in Google Cloud Console. If i remove the SHA1 Fingerprint, and so deauthorize the app, i get an empty map but the app does not crash.

The crash catlog:

2020-09-28 11:03:12.000 32246-32369/? E/AndroidRuntime: FATAL EXCEPTION: DefaultPool5
    Process: zz.yyyyyyyyyy.xxxxxxxxxx, PID: 32246
    java.lang.NullPointerException: throw with null exception
        at com.google.android.libraries.maps.lv.zzj.<init>(Unknown Source:9)
        at com.google.android.libraries.maps.lv.zzau.zza(Unknown Source:19)
        at com.google.android.libraries.maps.lv.zze.zzb(:1)
        at com.google.android.libraries.maps.lv.zze.zza(Unknown Source:2)
        at com.google.android.libraries.maps.eq.zzo.zza(Unknown Source:28)
        at com.google.android.libraries.maps.eq.zzc.zza(Unknown Source:11)
        at com.google.android.libraries.maps.fj.zzi.zza(Unknown Source:30)
        at com.google.android.libraries.maps.fj.zzi.zza(Unknown Source:85)
        at com.google.android.libraries.maps.fj.zzd.run(Unknown Source:8)
        at com.google.android.libraries.maps.fv.zzc.run(Unknown Source:4)
        at com.google.android.libraries.maps.fv.zzae.run(Unknown Source:7)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.android.libraries.maps.fv.zzv.run(Unknown Source:50)
        at java.lang.Thread.run(Thread.java:919)
1

There are 1 best solutions below

2
On

Solution was to suppress proguard obfuscation for relevant classes:

-optimizations !code/simplification/variable 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Fragment 
-keep public class * extends android.support.v4.app.Fragment 

# The Maps API uses custom Parcelables. 
# Use this rule (which is slightly broader than the standard recommended one) 
# to avoid obfuscating them. 

-keepclassmembers class * implements android.os.Parcelable { 
    static *** CREATOR; 
} 

# The Maps API uses serialization. 

-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

Quelle: https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/proguard-rules.pro