Android 混淆模板

#基本指令

# 设置混淆的压缩比率 0 ~ 7

-optimizationpasses 5

# 混淆时不使用大小写混合,混淆后的类名为小写

-dontusemixedcaseclassnames

# 指定不去忽略非公共库的类

-dontskipnonpubliclibraryclasses

# 指定不去忽略非公共库的成员

-dontskipnonpubliclibraryclassmembers

# 混淆时不做预校验

-dontpreverify       

# 混淆时不记录日志

-verbose         

# 忽略警告

-ignorewarning       

# 代码优化

-dontshrink

# 不优化输入的类文件             

-dontoptimize

# 保留注解不混淆         

-keepattributes *Annotation*,InnerClasses

# 避免混淆泛型

-keepattributes Signature

# 保留代码行号,方便异常信息的追踪

-keepattributes SourceFile,LineNumberTable

# 混淆采用的算法

-optimizations !code/simplification/cast,!field/*,!class/merging/*

# dump.txt文件列出apk包内所有class的内部结构

-dump class_files.txt     

# seeds.txt文件列出未混淆的类和成员

-printseeds seeds.txt

# usage.txt文件列出从apk中删除的代码

-printusage unused.txt

# mapping.txt文件列出混淆前后的映射

-printmapping mapping.txt



#不需混淆的Android类

-keep public class * extends android.app.Fragment

-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.preference.Preference

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.support.v4.**

-keep public class * extends android.support.annotation.**

-keep public class * extends android.support.v7.**

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class * extends android.view.View

-keep public class com.android.vending.licensing.ILicensingService

-keep class android.support.** {*;}



#support-v4包

-dontwarn android.support.v4.**

-keep class android.support.v4.app.** { *; }

-keep interface android.support.v4.app.** { *; }

-keep class android.support.v4.** { *; }



#support-v7包

-dontwarn android.support.v7.**

-keep class android.support.v7.internal.** { *; }

-keep interface android.support.v7.internal.** { *; }

-keep class android.support.v7.** { *; }


#support design

-dontwarn android.support.design.**

-keep class android.support.design.** { *; }

-keep interface android.support.design.** { *; }

-keep public class android.support.design.R$* { *; }


#避免混淆自定义控件类的 get/set 方法和构造函数

-keep public class * extends android.view.View{

    *** get*();

    void set*(***);

    public <init>(android.content.Context);

    public <init>(android.content.Context, android.util.AttributeSet);

    public <init>(android.content.Context, android.util.AttributeSet, int);

}


#关闭 Log日志

-assumenosideeffects class android.util.Log {

    public static *** d(...);

    public static *** v(...);

    public static *** i(...);

    public static *** e(...);

    public static *** w(...);

}

-dontoptimize不要配置,不然将会关闭优化,导致日志语句不会被优化掉。


#避免资源混淆

-keep class **.R$* {*;}


#避免layout中onclick方法(android:onclick="onClick")混淆

-keepclassmembers class * extends android.app.Activity{

    public void *(android.view.View);

}


#避免回调函数 onXXEvent 混淆

-keepclassmembers class * {

    void *(*Event);

}


#避免混淆枚举类

-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}


#Natvie 方法不混淆

-keepclasseswithmembernames class * {

    native <methods>;

}


#避免Parcelable混淆

-keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

}


#避免Serializable接口的子类中指定的某些成员变量和方法混淆

-keepclassmembers class * implements java.io.Serializable {

    static final long serialVersionUID;

    private static final java.io.ObjectStreamField[] serialPersistentFields;

    !static !transient <fields>;

    private void writeObject(java.io.ObjectOutputStream);

    private void readObject(java.io.ObjectInputStream);

    java.lang.Object writeReplace();

    java.lang.Object readResolve();

}


#WebView混淆配置

-keepclassmembers class fqcn.of.javascript.interface.for.webview {

    public *;

}

-keepclassmembers class * extends android.webkit.webViewClient {

    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);

    public boolean *(android.webkit.WebView, java.lang.String);

}

-keepclassmembers class * extends android.webkit.webViewClient {

    public void *(android.webkit.webView, jav.lang.String);

}


#ButterKnife混淆配置

-keep class butterknife.** { *; }

-dontwarn butterknife.internal.**

-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {

    @butterknife.* <fields>;

}

-keepclasseswithmembernames class * {

    @butterknife.* <methods>;

}


#OkHttp3混淆配置

-dontwarn com.squareup.okhttp3.**

-keep class com.squareup.okhttp3.** { *;}

-dontwarn okio.**


#Retrofit2混淆配置

-dontwarn retrofit2.**

-keep class retrofit2.** { *; }

-keepattributes Signature

-keepattributes Exceptions


#RxJava、RxAndroid混淆配置

-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;

}


#Glide混淆配置

#Glide 3

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {

  **[] $VALUES;

  public *;

}

#Glide 4

-keep public class * implements com.bumptech.glide.module.AppGlideModule

-keep public class * implements com.bumptech.glide.module.LibraryGlideModule

-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {

  **[] $VALUES;

  public *;

}


#Picasso混淆配置

-keep class com.parse.*{ *; }

-dontwarn com.parse.**

-dontwarn com.squareup.picasso.**

-keepclasseswithmembernames class * {

    native <methods>;

}


#Fresco混淆配置

# Keep our interfaces so they can be used by other ProGuard rules.

# See http://sourceforge.net/p/proguard/bugs/466/

-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip

-keep,allowobfuscation @interface com.facebook.soloader.DoNotOptimize

# Do not strip any method/class that is annotated with @DoNotStrip

-keep @com.facebook.common.internal.DoNotStrip class *

-keepclassmembers class * {

    @com.facebook.common.internal.DoNotStrip *;

}

# Do not strip any method/class that is annotated with @DoNotOptimize

-keep @com.facebook.soloader.DoNotOptimize class *

-keepclassmembers class * {

    @com.facebook.soloader.DoNotOptimize *;

}

# Keep native methods

-keepclassmembers class * {

    native <methods>;

}

-dontwarn okio.**

-dontwarn com.squareup.okhttp.**

-dontwarn okhttp3.**

-dontwarn javax.annotation.**

-dontwarn com.android.volley.toolbox.**

-dontwarn com.facebook.infer.**


#Fastjson混淆配置

-dontwarn com.alibaba.fastjson.**

-keep class com.alibaba.fastjson.**{*; }


#Gson混淆配置

-keep class com.google.gson.** {*;}

-keep class com.google.**{*;}

-keep class sun.misc.Unsafe { *; }

-keep class com.google.gson.stream.** { *; }

-keep class com.google.gson.examples.android.model.** { *; }


#Banner混淆配置

-keep class com.youth.banner.** {

    *;

}


#GreenDao混淆配置

GreenDAO 2:

-keep class de.greenrobot.dao.** {*;}

-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {

    public static Java.lang.String TABLENAME;

}

-keep class **$Properties

GreenDAO 3:

-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {

public static java.lang.String TABLENAME;

}

-keep class **$Properties

# If you do not use SQLCipher:

-dontwarn org.greenrobot.greendao.database.**

# If you do not use Rx:

-dontwarn rx.**


#百度定位混淆配置

-keep class vi.com.gdi.** { *; }

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

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

-dontwarn com.baidu.mapapi.utils.*

-dontwarn com.baidu.platform.comapi.b.*

-dontwarn com.baidu.platform.comapi.map.*


#百度地图混淆配置

-keep class com.baidu.** {*;}

-keep class vi.com.** {*;}

-dontwarn com.baidu.**


#高徳地图混淆配置

-dontwarn com.amap.api.**

-dontwarn com.a.a.**

-dontwarn com.autonavi.**

-keep class com.amap.api.**  {*;}

-keep class com.autonavi.**  {*;}

-keep class com.a.a.**  {*;}


#Bugly混淆配置

-dontwarn com.tencent.bugly.**

-keep public class com.tencent.bugly.**{*;}


#EventBus混淆配置

EventBus 2:

-keepclassmembers class ** {

    public void onEvent*(***);

}

# Only required if you use AsyncExecutor

-keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent {

    <init>(java.lang.Throwable);

}

EventBus 3:

-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);

}


#友盟分享混淆配置

-dontshrink

-dontoptimize

-dontwarn com.google.android.maps.**

-dontwarn android.webkit.WebView

-dontwarn com.umeng.**

-dontwarn com.tencent.weibo.sdk.**

-dontwarn com.facebook.**

-keep public class javax.**

-keep public class android.webkit.**

-dontwarn android.support.v4.**

-keep enum com.facebook.**

-keepattributes Exceptions,InnerClasses,Signature

-keepattributes *Annotation*

-keepattributes SourceFile,LineNumberTable

-keep public interface com.facebook.**

-keep public interface com.tencent.**

-keep public interface com.umeng.socialize.**

-keep public interface com.umeng.socialize.sensor.**

-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}

-keep class com.facebook.**

-keep class com.facebook.** { *; }

-keep class com.umeng.scrshot.**

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

-keep class com.umeng.socialize.sensor.**

-keep class com.umeng.socialize.handler.**

-keep class com.umeng.socialize.handler.*

-keep class com.umeng.weixin.handler.**

-keep class com.umeng.weixin.handler.*

-keep class com.umeng.qq.handler.**

-keep class com.umeng.qq.handler.*

-keep class UMMoreHandler{*;}

-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}

-keep class im.yixin.sdk.api.YXMessage {*;}

-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}

-keep class com.tencent.mm.sdk.** {

  *;

}

-keep class com.tencent.mm.opensdk.** {

  *;

}

-keep class com.tencent.wxop.** {

  *;

}

-keep class com.tencent.mm.sdk.** {

  *;

}

-dontwarn twitter4j.**

-keep class twitter4j.** { *; }

-keep class com.tencent.** {*;}

-dontwarn com.tencent.**

-keep class com.kakao.** {*;}

-dontwarn com.kakao.**

-keep public class com.umeng.com.umeng.soexample.R$*{

    public static final int *;

}

-keep public class com.linkedin.android.mobilesdk.R$*{

    public static final int *;

}

-keepclassmembers enum * {

    public static **[] values();

    public static ** valueOf(java.lang.String);

}

-keep class com.tencent.open.TDialog$*

-keep class com.tencent.open.TDialog$* {*;}

-keep class com.tencent.open.PKDialog

-keep class com.tencent.open.PKDialog {*;}

-keep class com.tencent.open.PKDialog$*

-keep class com.tencent.open.PKDialog$* {*;}

-keep class com.umeng.socialize.impl.ImageImpl {*;}

-keep class com.sina.** {*;}

-dontwarn com.sina.**

-keep class  com.alipay.share.sdk.** {

  *;

}

-keepnames class * implements android.os.Parcelable {

    public static final ** CREATOR;

}

-keep class com.linkedin.** { *; }

-keep class com.android.dingtalk.share.ddsharemodule.** { *; }

-keepattributes Signature


#友盟推送混淆配置

-dontwarn com.umeng.**

-dontwarn com.taobao.**

-dontwarn anet.channel.**

-dontwarn anetwork.channel.**

-dontwarn org.android.**

-dontwarn org.apache.thrift.**

-dontwarn com.xiaomi.**

-dontwarn com.huawei.**

-dontwarn com.meizu.**

-keepattributes *Annotation*

-keep class com.taobao.** {*;}

-keep class org.android.** {*;}

-keep class anet.channel.** {*;}

-keep class com.umeng.** {*;}

-keep class com.xiaomi.** {*;}

-keep class com.huawei.** {*;}

-keep class com.meizu.** {*;}

-keep class org.apache.thrift.** {*;}

-keep class com.alibaba.sdk.android.**{*;}

-keep class com.ut.**{*;}

-keep class com.ta.**{*;}

-keep public class **.R$*{

  public static final int *;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349