美文网首页android 技术知识Android开发Android开发经验谈
android 实际项目中混淆文件的配置(参考做法)

android 实际项目中混淆文件的配置(参考做法)

作者: 追梦小乐 | 来源:发表于2017-12-07 10:58 被阅读37次

    之前对项目混淆一直了解不是很透,趁着打包正式项目的时候有特意的去了解了一番,做些记录,备忘!

    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    
    -keepattributes Signature
    -keep class android.support.v4.** { *; }
    
    -ignorewarnings
    
    -dontwarn android.support.**
    -keepattributes EnclosingMetho
    
    -keepclassmembers class * {
       public <init>(org.json.JSONObject);
    }
    
    -assumenosideeffects class android.util.Log {
       public static *** d(...);
       public static *** v(...);
       public static *** i(...);
       public static *** w(...);
       public static *** e(...);
    }
    
    -keep public class * extends android.app.Activity                               # 保持哪些类不被混淆
    -keep public class * extends android.app.Application                            # 保持哪些类不被混淆
    -keep public class * extends android.app.Service                                # 保持哪些类不被混淆
    -keep public class * extends android.content.BroadcastReceiver                  # 保持哪些类不被混淆
    -keep public class * extends android.content.ContentProvider                    # 保持哪些类不被混淆
    -keep public class * extends android.app.backup.BackupAgentHelper               # 保持哪些类不被混淆
    -keep public class * extends android.preference.Preference                      # 保持哪些类不被混淆
    -keep public class com.android.vending.licensing.ILicensingService              # 保持哪些类不被混淆
    
    
      # 过滤R文件的混淆:
    -keep class **.R$* {*;}
    
    
     # 所有方法不进行混淆
    -keep public abstract interface com.huawei.android.airsharing.listener{
    public protected <methods>;
    }
    -keep public abstract interface com.huawei.android.airsharing.api{
    public protected <methods>;
    }
    
    
    -keepclasseswithmembernames class * {                                           # 保持 native 方法不被混淆
        native <methods>;
    }
    
    -keepclasseswithmembers class * {                                               # 保持自定义控件类不被混淆
        public <init>(android.content.Context, android.util.AttributeSet);
    }
    
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet, int);     # 保持自定义控件类不被混淆
    }
    
    -keepclassmembers class * extends android.app.Activity {                        # 保持自定义控件类不被混淆
       public void *(android.view.View);
    }
    
    -keepclassmembers enum * {                                                      # 保持枚举 enum 类不被混淆
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    -keep class * implements android.os.Parcelable {                                # 保持 Parcelable 不被混淆
      public static final android.os.Parcelable$Creator *;
    }
    
    #gson
    -keep class **.bean.** { *; }
    
    #webview
    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
       public *;
    }
    
    #databinding
    -dontwarn android.databinding.**
    -keep class android.databinding.** { *; }
    
    # OkHttp3
    -dontwarn com.squareup.okhttp3.**
    -keep class com.squareup.okhttp3.** { *;}
    -dontwarn okio.**
    
    # Okio
    -dontwarn com.squareup.**
    -dontwarn okio.**
    -keep public class org.codehaus.* { *; }
    -keep public class java.nio.* { *; }
    
    # retrofit
    -dontwarn okio.**
    -dontwarn javax.annotation.**
    
    #支付
    -keep class com.alipay.android.app.IAlixPay{*;}
    -keep class com.alipay.android.app.IAlixPay$Stub{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
    -keep class com.alipay.sdk.app.PayTask{ public *;}
    -keep class com.alipay.sdk.app.AuthTask{ public *;}
    
    
    #rx
    -dontwarn sun.misc.**
    -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
       long producerIndex;
       long consumerIndex;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode producerNode;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode consumerNode;
    }
    -dontnote rx.internal.util.PlatformDependent
    
    #eventBus
    -keepattributes *Annotation*
    -keepclassmembers class ** {
        @org.greenrobot.eventbus.Subscribe <methods>;
    }
    -keep enum org.greenrobot.eventbus.ThreadMode { *; }
    # Only required if you use AsyncExecutor
    -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
        <init>(Java.lang.Throwable);
    }
    
    #项目本身
    #-keep class com.tecsun.mobileintegration.** {*;}
    #-keep public class com.tecsun.base.** { *; }
    #-keep public class com.tecsun.tsb.network.** { *; }
    #-keep public class com.andview.refreshview.** { *; }
    

    参考文章

    相关文章

      网友评论

        本文标题:android 实际项目中混淆文件的配置(参考做法)

        本文链接:https://www.haomeiwen.com/subject/bzqdixtx.html