You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Gradle后,Gson搭配Google Maps发布构建崩溃需哪些ProGuard规则?

升级Gradle后发布构建崩溃问题排查与解决

问题现象

升级Gradle后,应用测试构建运行正常,但发布构建启动时直接崩溃,核心报错信息如下:

FATAL EXCEPTION: main
Process: com.richmondgamesstudio.foraging, PID: 22275 
java.lang.ClassCastException: com.google.gson.internal.l cannot be cast to com.google.android.gms.maps.model.LatLng
at com.richmondgamesstudio.foraging.Helper.l.b(Unknown Source:37) 
at y2.d.f(Unknown Source:448) 
at s2.b.onTransact(Unknown Source:89) 
at android.os.Binder.transact(Binder.java:1164) 
at fc.c(:com.google.android.gms.dynamite_mapsdynamite@225014047@22.50.14 (190800-0):2) 
at com.google.maps.api.android.lib6.impl.bg.run(:com.google.android.gms.dynamite_mapsdynamite@225014047@22.50.14 (190800-0):1) 
at android.os.Handler.handleCallback(Handler.java:942) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7872) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

注释掉build.gradle中的minifyEnabled和shrinkResources后,发布构建可正常运行,说明崩溃由代码混淆/资源收缩机制导致。

现有Gson ProGuard配置

当前已配置的Gson相关混淆规则如下:

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keep class * implements com.google.gson.GsonBuilder

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken


##---------------End: proguard configuration for Gson  ----------

解决方案

在现有ProGuard规则中添加Google Maps LatLng类的保留配置,避免混淆破坏类结构导致Gson反序列化失败:

# 保留Google Maps LatLng类及其构造方法,确保Gson能正确反序列化
-keep class com.google.android.gms.maps.model.LatLng { *; }
-keepclassmembers class com.google.android.gms.maps.model.LatLng {
    <init>(double, double);
}

原因说明

开启混淆后,R8/ProGuard会对LatLng类进行优化(如重命名类/方法、移除未直接引用的构造方法),导致Gson在反序列化时无法识别目标类型,转而生成内部占位类com.google.gson.internal.l,最终抛出类型转换异常。添加上述规则可确保LatLng的类结构和构造方法完整保留,让Gson能正确完成反序列化。

内容的提问来源于stack exchange,提问作者JonR85

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:22:40