Google Play Services v23 Proguard 配置
Posted
技术标签:
【中文标题】Google Play Services v23 Proguard 配置【英文标题】:Google Play Services v23 Proguard configuration 【发布时间】:2015-06-25 06:20:54 【问题描述】:升级到 Google Play 服务 v23 后,尝试在 Eclipse 中导出已签名的应用程序时看到此消息:
Proguard returned with error code 1. See console
Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced class android.content.pm.PackageInstaller
Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced class android.content.pm.PackageInstaller$SessionInfo
Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced class android.content.pm.PackageInstaller
Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced class android.content.pm.PackageInstaller$SessionInfo
Warning: com.google.android.gms.common.GooglePlayServicesUtil: can't find referenced method 'android.content.pm.PackageInstaller getPackageInstaller()' in class android.content.pm.PackageManager
Warning: com.google.android.gms.internal.zzif: can't find referenced method 'void setMixedContentMode(int)' in class android.webkit.WebSettings
You should check if you need to specify additional program jars.
Warning: there were 4 unresolved references to classes or interfaces.
You may need to specify additional library jars (using '-libraryjars').
Warning: there were 2 unresolved references to program class members.
Your input classes appear to be inconsistent.
You may need to recompile them and try again.
Alternatively, you may have to specify the option
'-dontskipnonpubliclibraryclassmembers'.
java.io.IOException: Please correct the above warnings first.
at proguard.Initializer.execute(Initializer.java:321)
at proguard.ProGuard.initialize(ProGuard.java:211)
at proguard.ProGuard.execute(ProGuard.java:86)
at proguard.ProGuard.main(ProGuard.java:492)
我添加了这个,在documentation中指定
-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;
并尝试添加
-keep class android.content.pm.PackageInstaller.**
到proguard-project.txt
,但这没有帮助。
我错过了什么?
【问题讨论】:
-keep class android.content.pm.**
怎么样
在 Google 官方文档中有一个关于使用 Eclipse+ADT 构建的部分,所以它也应该在那里工作。
medium.com/chanse-games-developers/…
【参考方案1】:
嘿,我遇到了完全相同的错误,我通过添加来修复它:
-keep class com.google.android.gms.** *;
-dontwarn com.google.android.gms.**
到我的 proguard.cfg
【讨论】:
这个解决方案对我有帮助,但***.com/questions/18646899/… 中的第二个建议使 apk 文件大小更小。 我已经尝试过相同的方法,但现在构建正在运行并正在运行。 Android Studio 没有生成 apk。有人可以帮忙吗? 文档说不需要为此手动添加proguard规则【参考方案2】:我有同样的问题,但使用的是 Android Studio。基于 Lary Ciminera 的解决方案,我添加了
-dontwarn com.google.android.gms.**
到 proguard-project.txt。
【讨论】:
【参考方案3】:我通过将它添加到 proguard-project.txt 来修复它:
-keep class android.content.pm.PackageInstaller
-keep class android.content.pm.PackageInstaller$SessionInfo
-keep class android.content.pm.PackageManager
-dontwarn android.content.pm.PackageInstaller
-dontwarn android.content.pm.PackageInstaller$SessionInfo
-dontwarn android.content.pm.PackageManager
-keep class android.webkit.WebSettings
-dontwarn android.webkit.WebSettings
【讨论】:
【参考方案4】:将您的目标 SDK 版本至少升级到 21 应该可以解决此问题。在 API 版本 21 中添加了 PackageInstaller 和相关的类:https://developer.android.com/reference/android/content/pm/PackageInstaller.html
【讨论】:
这不会阻止该应用在 Android 低于 5.0 的设备上使用吗?因为这大约占所有设备的 3%。 @LaryCiminera 不,目标与 minSdkVersion 不同; targetSdk 可能会触发兼容性模式。您应该将 targetSdk 设置为您拥有该应用程序的最新版本。以上是关于Google Play Services v23 Proguard 配置的主要内容,如果未能解决你的问题,请参考以下文章
使用 google-play-services 进行 Proguard
如何为项目使用不同版本的 google-play-services 库
Google Play Services 9.2.1 和 google-services 插件
为啥 Localytics 需要 google-play-services:ads?