Android 混淆打包方案

来源:互联网 发布:淘宝虎扑伙伴是真的吗 编辑:程序博客网 时间:2024/05/21 08:40

整理一些基本混淆代码,及常用的第三方混淆

#-------------------------------------------基本不用动区域--------------------------------------------#---------------------------------基本指令区-----------------------------------dontwarn#代码混淆的压缩比例,值在0-7之间-optimizationpasses 5#混淆后类名都为小写-dontusemixedcaseclassnames#指定不去忽略非公共的库的类-dontskipnonpubliclibraryclasses#指定不去忽略非公共的库的类的成员-dontskipnonpubliclibraryclassmembers#不做预校验的操作-dontpreverify#生成原类名和混淆后的类名的映射文件-verbose-printmapping proguardMapping.txt#指定混淆是采用的算法-optimizations !code/simplification/cast,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*,InnerClasses#不混淆泛型-keepattributes Signature#抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable#----------------------------------------------------------------------------#---------------------------------默认保留区---------------------------------# 保持哪些类不被混淆-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 * extends android.view.View-keep public class com.android.vending.licensing.ILicensingService-keep class android.support.** {*;}#保持 native 方法不被混淆-keepclasseswithmembernames class * {    native <methods>;}#保持自定义控件类不被混淆-keepclassmembers class * extends android.app.Activity{    public void *(android.view.View);}#保留枚举类不被混淆-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}#保留我们自定义控件(继承自View)不被混淆-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);}#保持自定义控件类不被混淆-keepclasseswithmembers class * {    public <init>(android.content.Context, android.util.AttributeSet);    public <init>(android.content.Context, android.util.AttributeSet, int);}# 保留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;    private void writeObject(java.io.ObjectOutputStream);    private void readObject(java.io.ObjectInputStream);    java.lang.Object writeReplace();    java.lang.Object readResolve();}# 保留R下面的资源-keep class **.R$* { *;}-keepclassmembers class * {    void *(**On*Event);}#----------------------------------------------------------------------------#---------------------------------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);}#----------------------------------------------------------------------------#---------------------------------------------------------------------------------------------------

常用的第三方混淆

#---------------------------------2.第三方包---------------#----------->xUtils3.0-keepattributes Signature,Annotation-keep public class org.xutils.** {public protected *;}-keep public interface org.xutils.** {public protected *;}-keepclassmembers class * extends org.xutils.** {public protected *;}-keepclassmembers @org.xutils.db.annotation.* class * {}-keepclassmembers @org.xutils.http.annotation. class * {*;}-keepclassmembers class * {@org.xutils.view.annotation.Event ;}#----------->Retrofit-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions#----------->Retrolambda-dontwarn java.lang.invoke.*#----------->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;}#----------->极光推送-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }#----------->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.* { *; }#----------->OrmLite-keepattributes *DatabaseField*-keepattributes *DatabaseTable*-keepattributes *SerializedName*-keep class com.j256.**-keepclassmembers class com.j256.** { *; }-keep enum com.j256.**-keepclassmembers enum com.j256.** { *; }-keep interface com.j256.**-keepclassmembers interface com.j256.** { *; }#----------->Gson-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。# 将下面替换成自己的实体类-keep class com.example.bean.** { *; }#----------->Glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {  **[] $VALUES;  public *;}#----------->FastJson-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *; }-keepattributes Signature-keepattributes *Annotation*#----------->Fresco-keep class com.facebook.fresco.** {*;}-keep interface com.facebook.fresco.** {*;}-keep enum com.facebook.fresco.** {*;}#----------->ButterKnife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * {    @butterknife.* <fields>;}-keepclasseswithmembernames class * {    @butterknife.* <methods>;}#----------->EventBus-keepattributes *Annotation*-keepclassmembers class ** {    @org.greenrobot.eventbus.Subscribe <methods>;}-keep enum org.greenrobot.eventbus.ThreadMode { *; }#----------->高德地图混淆    #3D 地图    -keep   class com.amap.api.mapcore.**{*;}    -keep   class com.amap.api.maps.**{*;}    -keep   class com.autonavi.amap.mapcore.*{*;}    #定位    -keep class com.amap.api.location.**{*;}    -keep class com.amap.api.fence.**{*;}    -keep class com.autonavi.aps.amapapi.model.**{*;}    #搜索    -keep   class com.amap.api.services.**{*;}    #2D地图    -keep class com.amap.api.maps2d.**{*;}    -keep class com.amap.api.mapcore2d.**{*;}    #3导航    -keep class com.amap.api.navi.**{*;}    -keep class com.autonavi.**{*;}#----------->集成地图SDK的应用,在打包混淆的时候,需要注意与地图SDK相关的方法不可被混淆。混淆方法如下:-keep class com.baidu.** {*;}-keep class vi.com.** {*;}-dontwarn com.baidu.**#----------->GreenDao混淆:-keep class de.greenrobot.dao.** {*;}-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {    public static java.lang.String TABLENAME;}-keep class **$Properties#------->环信-keep class com.hyphenate.** {*;}-keep class com.superrtc.** {*;}-dontwarn  com.hyphenate.**