Android ConnectivityManager ClassCastException与Google Analytics v4和ProGuard
我在编译使用ProGuard和Google Analytics v4的应用程序时遇到问题。另外一个类似的线程是,除了没有太多的细节 我尝试了以下方法,但没有效果: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
-keepandroid.support.*{*;}
包。这一错误会随着每一位模糊代码的出现而继续出现,就好像将新的模糊代码与预先模糊的Google Analytics代码连接在一起总是会导致错误-keepattributes签名
,以防泛型出现问题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.** { *; }