Proguard谷歌游戏服务jar

我正试图用proguard混淆google play服务jar。 我尝试了两个版本的proguard配置文件。

  1. 第一个包含

    -keep class ** { public protected *; } 

jar子不会混淆。 看起来不错。

  1. 第二个包含

     -keep class com.** { public protected *; } 

而且proguard删除了永恒。 我收到一个错误:

  Error: The output jar is empty. Did you specify the proper '-keep' options? 

为什么它是空的,因为主要的google play服务包是com.google.android.gms?

以下ProGuard配置缩小了Google Play服务jar,无需优化或混淆,只保留与广告相关的API:

 -injars android-sdk/extras/google/google_play_services/libproject/google-play-services_lib/libs/google-play-services.jar -outjars google-play-services-ads.jar -libraryjars android-sdk/extras/android/support/v4/android-support-v4.jar -libraryjars android-sdk/platforms/android-20/android.jar -verbose -forceprocessing -dontoptimize -dontobfuscate -dontwarn com.google.**.R -dontwarn com.google.**.R$* -dontnote -keep public class com.google.ads.** { public protected *; } -keep public class com.google.android.gms.ads.** { public protected *; } -keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable { java.lang.String NULL; } 

它将原始jar子从2819个类别减少到409个类别(2.7M到476K)。 我还没有测试过结果。 如果通过reflection访问任何已删除的类,则它们也需要保留在配置中。