android proguard 混淆模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z740852294/article/details/80757598

ProGuard简介

主要功能:
压缩(shrink):删除无用的类、方法
优化(optimize):对字节码优化,删除无用指令
混淆(obfuscate):对类、方法进行重命名
预检(preveify):代码预检
ProGuard 开源地址:https://sourceforge.net/projects/proguard/

模板

#-------------------------------------------基本不用动区域--------------------------------------------
#---------------------------------基本指令区----------------------------------
#代码混淆压缩比,0-7之间,默认为5,一般不需要修改
-optimizationpasses 5
#混小时不使用大小写混合,混淆后的类名为小写
-dontusemixedcaseclassnames
#指定不去忽略非公共的库的类
-dontskipnonpubliclibraryclasses
#指定不去忽略非公共的库的类的成员
-dontskipnonpubliclibraryclassmembers
#不做预校验,preverify是混淆的4个步骤之一
#android不需要这步骤,去掉可以加快混淆速度
-dontpreverify
#有了verbose这句话,混淆后就会生成映射文件
#包含有类名->混淆后类名的映射关系
#然后使用proguardMapping指定映射文件的名称
-verbose
-printmapping proguardMapping.txt
#指定混淆时采用的算法,后面的参数是一个过滤器
#这个过滤器是谷歌推荐的算法,一般不改变
-optimizations !code/simplification/cast,!field/*,!class/merging/*
#保护代码中的Annotation不被混淆
#这在json实体映射是非常重要,比如fastjson
-keepattributes *Annotation*,InnerClasses
#避免混淆泛型
#这在json实体映射是非常重要,比如fastjson
-keepattributes Signature
#抛出异常是保留代码行号
-keepattributes SourceFile,LineNumberTable
#如果用到了反射需要加入
-keepattributes EnclosingMethod
#----------------------------------------------------------------------------

#---------------------------------默认保留区---------------------------------
#保留了继承自activity、application这些类的子类
#因为这些子类都可能被外部调用
#比如说,第一行就保证了所有的activity的子类不要被混淆
-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.** {*;}

#如果有引用android-support-v4.jar包,可以添加下面这行
-keep public class com.tuniu.app.ui.fragment.** {*;}

#保留所有的本地native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
#保留在activity中的方法参数是view的方法
#从而我们在layout里面编写onclick就不会被影响
-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$* {
 *;
}
#对于带有回调函数onXXEvent的,不能被混淆
-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);
}
#----------------------------------------------------------------------------
#---------------------------------------------------------------------------------------------------

保留区

#---------------------------------1.实体类---------------------------------

#实体类由于涉及到与服务端的交互,各种gson的交互如此等等,是要保留的
-keepclassmembers class com.test.example.activity.** {*;}
-keepclassmembers class com.test.example.fragment.** {*;}
-keepclassmembers class com.test.example.model.** {*;}
-keep class com.test.example.model.** {

    public <fields>;

    public <methods>;

}

-keep public class com.test.example.R$*{
    public static final int *;
}
#-------------------------------------------------------------------------

!!!!!!!!!!!!这里的com.test.example要换成自己的包名!!!!!!!!
#---------------------------------2.第三方包-------------------------------

# --------------------   other  ------------------
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.**

# --------------------   高德  ------------------
-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.** {*;}


# --------------------  百度   ------------------
-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}
-dontwarn com.baidu.**


# --------------------   支付宝    ------------------
-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 *;}
-keep class com.alipay.sdk.app.H5PayCallback {
    <fields>;
    <methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}


#==================gson==========================
-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.tencent.mm.sdk.** { *;}


#==================imageloader==========================
-keep class com.nostra13.universalimageloader.** { *; }
-keepclassmembers class com.nostra13.universalimageloader.** {*;}


#==================picasso==========================
-keep class com.parse.*{ *; }
-dontwarn com.parse.**
-dontwarn com.squareup.picasso.**
-keepclasseswithmembernames class * {
    native <methods>;
}


#==================友盟==========================
-keepclassmembers class * {
   public <init> (org.json.JSONObject);
}
-keep public class com.zshy.pwb.R$*{
public static final int *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class com.umeng.socialize**{*;}
-keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }


#-------------------------------------------------------------------------
#---------------------------------3.与js互相调用的类------------------------
#-------------------------------------------------------------------------

-keepclassmembers
   class com.test.example.activity.MainActivity$JSInterface1{
   <methods>;
}
########################  JSInterface1  是js方法所在的类名!!!!!!  没有这里就空着

#---------------------------------4.反射相关的类和方法-----------------------


#----------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/z740852294/article/details/80757598