ProGuard:找不到引用类com.google.android.gms.R
在Android SDKpipe理器中进行了一些更新之后,
ProGuard: [] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R ProGuard: [] Warning: com.google.android.gms.auth.GoogleAuthUtil: can't find referenced class com.google.android.gms.R$string ... etc.
如果设置-dontwarn com.google.android.gms.**
编译是可以的。 但运行后,我得到许多这样的报告(来自许多设备)的错误:
Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class com.google.android.gms.common.SignInButton
在我的设备上一切正常。 更新之前,我没有ProGuard的警告,所有的工作都很完美。 它如何修复?
尽pipe将此添加到proguard-project.txt
文件中,它将保留所有类。
-keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.**
我更喜欢这个,这使得apk文件的大小要小得多:
-keep public class com.google.android.gms.* { public *; } -dontwarn com.google.android.gms.**
此外,请注意Google Play Proguard的最新通知: http : //developer.android.com/google/play-services/setup.html#Proguard
-keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
你需要忽略像你正在编译,但你也需要保持这个类,以便它可以在运行时find它。
将这两行添加到您的proguardconfiguration文件中:
-keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.**
如果你使用proguard,你需要保留一些GMS(Google Play Services)类。 希望他们用@com.google.android.gms.common.annotation.KeepName
注解。
# Proguard config for project using GMS -keepnames @com.google.android.gms.common.annotation.KeepName class com.google.android.gms.**, com.google.ads.** -keepclassmembernames class com.google.android.gms.**, com.google.ads.** { @com.google.android.gms.common.annotation.KeepName *; } # Called by introspection -keep class com.google.android.gms.**, com.google.ads.** extends java.util.ListResourceBundle { protected java.lang.Object[][] getContents(); } # This keeps the class name as well as the creator field, because the # "safe parcelable" can require them during unmarshalling. -keepnames class com.google.android.gms.**, com.google.ads.** implements android.os.Parcelable { public static final ** CREATOR; } # com.google.android.gms.auth.api.signin.SignInApiOptions$Builder # references these classes but no implementation is provided. -dontnote com.facebook.Session -dontnote com.facebook.FacebookSdk -keepnames class com.facebook.Session {} -keepnames class com.facebook.FacebookSdk {} # android.app.Notification.setLatestEventInfo() was removed in # Marsmallow, but is still referenced (safely) -dontwarn com.google.android.gms.common.GooglePlayServicesUtil
我遇到了类似的问题,最终发现我已经更新了Google Play服务模块,但是我没有将模块重新添加到Android Studio的主模块中。 添加回来解决我的问题。
- 更新模拟器中的Google Play服务
- 如何禁止“避免使用捆绑版Google Play服务SDK”警告?
- 如何在Android Studio中使用Google Maps Api v2创buildAndroid应用程序?
- LogCat消息:找不到Google Play服务资源。 检查您的项目configuration,以确保包含资源
- 在尝试订阅产品时需要应用内结算Android返回authentication
- google-services.json究竟做了什么?
- GoogleSignatureVerifier签名无效的消息(谷歌播放服务9.0.0)
- 从Android电子市场安装应用后获取引荐来源
- Google Play服务库更新并丢失符号@ integer / google_play_services_version