微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Google Maps API v2时,已签名的APK崩溃,未签名的崩溃

如何解决使用Google Maps API v2时,已签名的APK崩溃,未签名的崩溃

在我的android应用程序中,我使用Google Maps API v2来显示带有标记的地图。它与本地调试和发行版完美配合。一旦我建立了一个签名的APK,当显示地图时,应用程序就会崩溃。仅当我在Google Cloud Console中授权签名的APK的SHA1进行API访问时,它才会崩溃。如果我删除SHA1指纹并取消对应用程序的授权,则会得到一个空白地图,但该应用程序不会崩溃。

崩溃目录:

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)

解决方法

解决方案是抑制有关类别的proguard混淆:

-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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。