Android 混淆白名单(基础+第三方)持续更新···

Android 混淆基础配置及第三方混淆

一、基础配置

记录下,以后项目直接复制用。

混淆前配置:1、打开混淆,在项目/app/build.gradle文件里,将buildTypes节点下,将minifyEnabled设置为true就是开启混淆,开启混淆后生成relase版apk,代码就是被混淆后的。

1、配置

下列配置写在app目录下的proguard-rules.pro文件里面。 下列所有设置的keep ——- ,在生成relase版apk时,都不会被混淆。

# 设置混淆的压缩比率 0 ~ 7
-optimizationpasses 5
# 混淆后类名都为小写   Aa aA
-dontusemixedcaseclassnames
# 指定不去忽略非公共库的类
-dontskipnonpubliclibraryclasses
#不做预校验的操作
-dontpreverify
# 混淆时不记录日志
-verbose
# 混淆采用的算法.
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#保留代码行号,方便异常信息的追踪
-keepattributes SourceFile,LineNumberTable

#dump文件列出apk包内所有class的内部结构
-dump class_files.txt        
#seeds.txt文件列出未混淆的类和成员
-printseeds seeds.txt
#usage.txt文件列出从apk中删除的代码
-printusage unused.txt
#mapping文件列出混淆前后的映射
-printmapping mapping.txt

#不提示V4包下错误警告
-dontwarn android.support.v4.**
#保持下面的V4兼容包的类不被混淆
-keep class android.support.v4.**{*;}
#避免混淆Android基本组件,下面是兼容性比较高的规则:
-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
#避免混淆所有native的方法,涉及到C、C++
-keepclasseswithmembernames class * {
    native ;
}
#不提示V4包下错误警告
-dontwarn android.support.v4.**
#保持下面的V4兼容包的类不被混淆
-keep class android.support.v4.**{*;}
#避免混淆自定义控件类的get/set方法和构造函数
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#避免混淆枚举类
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

#避免混淆序列化类
#不混淆Parcelable和它的实现子类,还有Creator成员变量
-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;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

#避免混淆JSON类的构造函数
#使用GSON、fastjson等框架时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象
-keepclassmembers class * {
    public (org.json.JSONObject);
}

二、第三方框架

bugly

#=============bugly==============start
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
#=============bugly==============end

logger

#=============logger==============start
-dontwarn com.orhanobut.**
-keep public class com.orhanobut.**{*;}
#=============logger==============end

ButterKnife

#=============ButterKnife==============start
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {    
    @butterknife.* ;
}
-keepclasseswithmembernames class * {    
    @butterknife.* ;
}
#=============ButterKnife==============end

Gson

#=============Gson==============start
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *;}
#这句非常重要,主要是滤掉 com.demo.demo.bean包下的所有.class文件不进行混淆编译,com.demo.demo是你的包名
-keep class com.demo.demo.bean.** {*;}
#=============Gson==============end

ShareSDK

#=============ShareSDK==============start
-keep class cn.sharesdk.**{*;}
-keep class com.sina.**{*;}
-keep class **.R$* {*;}
-keep class **.R{*;}
-dontwarn cn.sharesdk.**
-dontwarn **.R$*
-dontwarn com.tencent.**
-keep class com.tencent.** {*;}
#=============ShareSDK==============end

Rxjava

#=============Rxjava==============start
# rx
-dontwarn rx.**
-keepclassmembers class rx.** { *; }
# retrolambda
-dontwarn java.lang.invoke.*
#=============Rxjava==============end

Okhttputils

#=============Okhttputils==============start
#okhttputils
-dontwarn com.zhy.http.**
-keep class com.zhy.http.**{*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
#okio
-dontwarn okio.**
-keep class okio.**{*;}
#=============Okhttputils==============end

努力更新中·····

你可能感兴趣的:(Android)