Android ConnectivityManager ClassCastException与Google Analytics v4和ProGuard

Android ConnectivityManager ClassCastException与Google Analytics v4和ProGuard,android,google-analytics,proguard,Android,Google Analytics,Proguard,我在编译使用ProGuard和Google Analytics v4的应用程序时遇到问题。另外一个类似的线程是,除了没有太多的细节 我尝试了以下方法,但没有效果: 保持com.google.*{*;} 做一个-keepandroid.support.*{*;}包。这一错误会随着每一位模糊代码的出现而继续出现,就好像将新的模糊代码与预先模糊的Google Analytics代码连接在一起总是会导致错误 使用-keepattributes签名,以防泛型出现问题 使用由四个字母组成的模糊字典(如rNq

我在编译使用ProGuard和Google Analytics v4的应用程序时遇到问题。另外一个类似的线程是,除了没有太多的细节

我尝试了以下方法,但没有效果:

  • 保持com.google.*{*;}
  • 做一个
    -keepandroid.support.*{*;}
    包。这一错误会随着每一位模糊代码的出现而继续出现,就好像将新的模糊代码与预先模糊的Google Analytics代码连接在一起总是会导致错误
  • 使用
    -keepattributes签名
    ,以防泛型出现问题
  • 使用由四个字母组成的模糊字典(如rNqp、sSlq),以防与Android索引有关的内容导致预模糊的Google Analytics类与模糊的项目文件冲突
  • 例外情况如下:

    11-08 22:45:01.644    2206-2226/com.example.helloworld E/GAV3﹕ Thread[GAThread,5,main]: Error on GAThread: java.lang.ClassCastException: android.net.ConnectivityManager cannot be cast to android.support.v4.d.a
                at com.google.a.a.a.at.a(Unknown Source)
                at com.google.a.a.a.am.a(Unknown Source)
                at com.google.a.a.a.s.h(Unknown Source)
                at com.google.a.a.a.s.g(Unknown Source)
                at com.google.a.a.a.s.a(Unknown Source)
                at com.google.a.a.a.u.run(Unknown Source)
                at com.google.a.a.a.ab.run(Unknown Source)
    11-08 22:45:01.644    2206-2226/com.example.helloworld E/GAV3﹕ Thread[GAThread,5,main]: Google Analytics is shutting down.
    
    Proguard配置文件(99.9%):

    #这是ProGuard的配置文件。
    # http://proguard.sourceforge.net/index.html#manual/usage.html
    #优化:如果您不想优化,请使用
    #proguard-android.txt配置文件,而不是此文件
    #关闭优化标志。添加优化将引入
    #某些风险,例如,并非所有优化都由
    #ProGuard适用于Dalvik的所有版本。下面的旗帜将转向
    #关闭已知存在问题的各种优化,但列表中可能没有
    #完整的或最新的。(可以使用“算术”优化
    #如果您只针对Android 2.0或更高版本,请使用。)请确保
    #如果你走这条路,要彻底测试。
    #-优化!代码/简化/转换,!字段/*,!类/合并/*
    #-优化过程5
    #-允许访问修改
    #-不要翻转
    #此文件的其余部分与未优化版本相同
    #Proguard配置文件(除了另一个文件
    #关闭优化的标志)。
    -dontusemixedcaseclassnames
    -DontskipnonPublicLibraryClass
    -冗长的
    -keepattributes*注释*
    -保持公共类com.google.vending.licensing.ILicensingService
    -保持公共类com.android.vending.licensing.ILicensingService
    #有关本机方法,请参见http://proguard.sourceforge.net/manual/examples.html#native
    -KeepClassSwithMemberNames类*{
    本地人;
    }
    #在视图中保留setter,以便动画仍然可以工作。
    #看http://proguard.sourceforge.net/manual/examples.html#beans
    -keepclassmembers公共类*扩展了android.view.view{
    无效集*(***);
    ***得到*();
    }
    #我们希望在活动中保留可以在XML属性onClick中使用的方法
    -keepclassmembers类*扩展了android.app.Activity{
    public void*(android.view.view);
    }
    #有关枚举类,请参见http://proguard.sourceforge.net/manual/examples.html#enumerations
    -keepclassmembers枚举*{
    公共静态**[]值();
    公共静态**valueOf(java.lang.String);
    }
    -keep class*实现android.os.Parcelable{
    公开静态最终android.os.Parcelable$Creator*;
    }
    -keepclassmembers类**.R$*{
    公共静态;
    }
    #支持库包含对较新平台版本的引用。
    #如果此应用程序链接的是较旧的应用程序,请不要警告这些问题
    #平台版本。我们知道他们,他们是安全的。
    -dontwarn android.support**
    -保留署名
    
    看起来您使用的是proguard-android-optimize.txt的副本(更常见的方法是引用android SDK中维护的原始文件)。您可以尝试禁用优化:

    -dontoptimize
    
    如果这确实避免了问题,您可以在中或直接向我报告问题

    确保您使用的是最新版本的ProGuard(撰写本文时为5.1版)和最新版本的GMS库


    (我是ProGuard的开发者)

    我找到了解决方案。它只涉及不混淆
    ConnectivityManager
    。我用过:

    -keep android.net.** { *; }
    

    这很好。

    你有没有尝试添加-keep class com.google.*{*.}@Devrim是的,我有。该命令将告诉ProGuard不要混淆我在项目中使用的所有Google库。然而,问题似乎并不在于Google库被模糊化了,而是与预先模糊化的Google Analytics库和新模糊化的代码存在某种冲突。我编辑了我的问题以反映这一点。
    -keep android.net.** { *; }