将Google Play服务更新至5.0版(修订版18)后,ProGuard失败

时间:2014-07-15 11:46:31

标签: android google-play-services proguard android-support-library

用于编译我的Android应用程序的My Ant脚本运行良好,但在将Google Play服务库更新到版本5.0(修订版18)后,ProGuard失败并显示以下输出:

-obfuscate:
    [mkdir] Created dir: /srv2/jenkins/jobs/CCNF Google only/workspace/trunk/org.digitalcure.ccnf.app/bin/proguard
      [jar] Building jar: /srv2/jenkins/jobs/CCNF Google only/workspace/trunk/org.digitalcure.ccnf.app/bin/proguard/original.jar
 [proguard] ProGuard, version 4.7
 [proguard] Reading input...
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/org.digitalcure.ccnf.app/bin/proguard/original.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/org.digitalcure.android.common/bin/classes.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/google-play-services_lib/bin/classes.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/android-support-v7-appcompat/bin/classes.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/android-support-v7-appcompat/libs/android-support-v7-appcompat.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/android-support-v7-appcompat/libs/android-support-v4.jar]
 [proguard] Reading program jar [/srv2/jenkins/jobs/CCNF Google only/workspace/trunk/google-play-services_lib/libs/google-play-services.jar]
 [proguard] Reading library jar [/srv/jenkins/tools/android-sdk-linux/platforms/android-17/android.jar]
 [proguard] Initializing...
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Note: android.support.v4.app.NotificationCompatJellybean: can't find dynamically referenced class android.app.Notification$Action
 [proguard] Note: android.support.v4.text.ICUCompatIcs: can't find dynamically referenced class libcore.icu.ICU
 [proguard] Note: com.google.android.gms.maps.internal.u: can't find dynamically referenced class com.google.android.gms.maps.internal.CreatorImplGmm6
 [proguard] Note: com.google.android.gms.maps.internal.u: can't find dynamically referenced class com.google.android.gms.maps.internal.CreatorImpl
 [proguard] Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
 [proguard] Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService'
 [proguard] Note: the configuration refers to the unknown class 'Object'
 [proguard]       Maybe you meant the fully qualified name 'java.lang.Object'?
 [proguard] Note: the configuration refers to the unknown class 'fqcn.of.javascript.interface.for.webview'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.AdSize { AdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { com.google.android.gms.ads.AdRequest a(android.content.Context,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationBannerListener'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { void requestBannerAd(android.content.Context,com.google.android.gms.ads.mediation.MediationBannerListener,android.os.Bundle,com.google.android.gms.ads.AdSize,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter { void requestInterstitialAd(android.content.Context,com.google.android.gms.ads.mediation.MediationInterstitialListener,android.os.Bundle,com.google.android.gms.ads.mediation.MediationAdRequest,android.os.Bundle); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationAdRequest'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter$a { AdMobAdapter$a(com.google.ads.mediation.admob.AdMobAdapter,com.google.android.gms.ads.mediation.MediationBannerListener); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationBannerListener'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.admob.AdMobAdapter$b { AdMobAdapter$b(com.google.ads.mediation.admob.AdMobAdapter,com.google.android.gms.ads.mediation.MediationInterstitialListener); }', but not the descriptor class 'com.google.android.gms.ads.mediation.MediationInterstitialListener'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestBannerAd(com.google.ads.mediation.MediationBannerListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.AdSize,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventExtras'
 [proguard] Note: the configuration keeps the entry point 'com.google.ads.mediation.customevent.CustomEventAdapter { void requestInterstitialAd(com.google.ads.mediation.MediationInterstitialListener,android.app.Activity,com.google.ads.mediation.customevent.CustomEventServerParameters,com.google.ads.mediation.MediationAdRequest,com.google.android.gms.ads.mediation.customevent.CustomEventExtras); }', but not the descriptor class 'com.google.android.gms.ads.mediation.customevent.CustomEventExtras'
 [proguard] Note: there were 4 references to unknown classes.
 [proguard]       You should check your configuration for typos.
 [proguard] Note: there were 11 unkept descriptor classes in kept class members.
 [proguard]       You should consider explicitly keeping the mentioned classes
 [proguard]       (using '-keep').
 [proguard] Note: there were 5 unresolved dynamic references to classes or interfaces.
 [proguard]       You should check if you need to specify additional program jars.
 [proguard] Warning: there were 9 unresolved references to classes or interfaces.
 [proguard]          You may need to specify additional library jars (using '-libraryjars').

将它与前一个(工作)输出进行比较,以下几行是新的:

 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager
 [proguard] Warning: com.google.android.gms.cast.TextTrackStyle: can't find referenced class android.view.accessibility.CaptioningManager$CaptionStyle
 [proguard] Note: android.support.v4.app.NotificationCompatJellybean: can't find dynamically referenced class android.app.Notification$Action

加上输出结尾的错误信息。

发生什么事了?它接触到android.view.accessibility.CaptioningManager是在API级别19引入的。

3 个答案:

答案 0 :(得分:10)

我注意到Android支持库的目标版本从16更改为19(同时更新到版本20)。我的应用程序是针对目标版本17构建的。所以我将主应用程序项目的目标版本从17更改为19,现在一切都很好。那就是它!

答案 1 :(得分:4)

对于@ stefan222的答案不起作用的人,您可以添加

-dontwarn com.google.android.gms.cast.**

到你的proguard.cfg

这样做会让您自担风险。如果添加,请确保彻底测试您的应用。

答案 2 :(得分:0)

对于想要摆脱警告的人:

因此不会显示任何警告

-dontwarn com.google.android.gms.**