2014-09-25 108 views
1

我想混淆谷歌播放服务jar与proguard。 我尝试了两个版本的proguard配置文件。Proguard谷歌播放服务jar

  1. 第一个包含

    -keep class ** { 
        public protected *; 
    } 
    

而且罐子撑不混乱。它看起来不错。

  • 第二个包含

    -keep class com.** { 
        public protected *; 
    } 
    
  • 而且proguard的删除everithing。我收到一个错误:

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

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

    +0

    据我所知,Google Play服务已经使用Proguard进行混淆。 – tasomaniac 2014-09-25 11:42:16

    +0

    我主要对缩小阶段感兴趣,因为我只需要广告包中的一种方法。 – TpoM6oH 2014-09-25 12:08:43

    +0

    据我所知,当你提供外部库时,proguard不能缩小它们。或者你将不得不做太多的配置。我在会议上向proguard的创建者提出了同样的问题,他回答说,用proguard很难做到这一点。 – tasomaniac 2014-09-25 14:26:24

    回答

    2

    以下ProGuard的配置缩小了谷歌Play服务的罐子,没有优化或混淆,仅保留广告相关的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; 
    } 
    

    它减少了从2819班409班原来的罐子(2.7M至476K)。我还没有测试结果。如果任何移除的类都被反射访问,它们也需要保存在配置中。