Android 默认混淆文件内容模板 2018-11-29

-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, java.lang.String);

}

# 代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改

-optimizationpasses 5

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

# windows下的同学还是加入这个选项吧(windows大小写不敏感)

-dontusemixedcaseclassnames

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

# 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用,此时就需要加入此条声明

-dontskipnonpubliclibraryclasses

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

-dontskipnonpubliclibraryclassmembers

#优化  不优化输入的类文件

-dontoptimize

# 不做预检验,preverify是proguard的四个步骤之一

# Android不需要preverify,去掉这一步可以加快混淆速度

-dontpreverify

#混淆时是否记录日志

-verbose

# 混淆时所采用的算法

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

#保护注解

-keepattributes *Annotation*

# 保持哪些类不被混淆

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

#如果有引用v4包可以添加下面这行

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

#忽略警告

-ignorewarning

##记录生成的日志数据,gradle build时在本项目根目录输出##

#apk 包内所有 class 的内部结构

-dump proguard/class_files.txt

#未混淆的类和成员

-printseeds proguard/seeds.txt

#列出从 apk 中删除的代码

-printusage proguard/unused.txt

#混淆前后的映射

-printmapping proguard/mapping.txt

########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

#如果引用了v4或者v7包

-dontwarn android.support.**

####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####

#保持 native 方法不被混淆

-keepclasseswithmembernames class *{

native ;

}

#保持自定义控件类不被混淆

-keepclasseswithmembers class *{

public (android.content.Context, android.util.AttributeSet);

}

#保持自定义控件类不被混淆

-keepclassmembers class * extends android.app.Activity{

public void *(android.view.View);

}

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

public (android.content.Context);

public (android.content.Context, android.util.AttributeSet);

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

public void set*(...);

}

#保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable{

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

}

#保持 Serializable 不被混淆

-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆

-keepclassmembers class * implements java.io.Serializable{

static final long serialVersionUID;

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

!static !transient ;

!private ;

!private ;

private void writeObject(java.io.ObjectOutputStream);

private void readObject(java.io.ObjectInputStream);

java.lang.Object writeReplace();

java.lang.Object readResolve();

}

# 对于带有回调函数onXXEvent的,不能混淆

-keepclassmembers class *{

void *(**On*Event);

}

#保持枚举 enum 类不被混淆

-keepclassmembers enum *{

public static **[] values();

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

}

-keepclassmembers class *{

public void *ButtonClicked(android.view.View);

}

#不混淆资源类

-keepclassmembers class **.R$*{

public static ;

}

#避免混淆泛型 如果混淆报错建议关掉

-keepattributes Signature

# 抛出异常时保留代码行号

-keepattributes SourceFile,LineNumberTable

#不能混淆这个成员变量,否则会导致BottomNavigationMenuView ShiftingMode设置无效

-keepclassmembers class android.support.design.internal.BottomNavigationMenuView{

boolean mShiftingMode;

}

# shareSdk混淆设置

-keep class cn.sharesdk.**{*;}

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

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

-keep class **.R{*;}

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

-dontwarn com.mob.**

-dontwarn cn.sharesdk.**

-dontwarn **.R$*

#okhttp3

-dontwarn okhttp3.logging.**

-keep class okhttp3.internal.**{*;}

-dontwarn okio.**

#retrofit

-dontwarn javax.annotation.**

-dontwarn retrofit2.**

-keep class retrofit2.**{ *; }

#rxjava

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

}

你可能感兴趣的:(Android 默认混淆文件内容模板 2018-11-29)