安卓代码混淆

#忽略警告 不忽略可能打包不成功

-ignorewarnings

#不要压缩(这个必须,因为开启混淆的时候 默认 会把没有被调用的代码 全都排除掉)

-dontshrink

#保护泛型 如果混淆报错建议关掉

-keepattributes Signature

#保持BuildConfig不被混淆(因为混淆之后就无法在导出jar时排除该类)

-keep class com.xxx.xxx.BuildConfig{

public *;

}

##########################################################################默认配置

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

-optimizationpasses 5

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

-dontusemixedcaseclassnames

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

-dontskipnonpubliclibraryclasses

# 这句话能够使我们的项目混淆后产生映射文件

# 包含有类名->混淆后类名的映射关系

-verbose

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

-dontskipnonpubliclibraryclassmembers

# 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

-dontpreverify

# 保留Annotation不混淆

-keepattributes *Annotation*,InnerClasses

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

-keepattributes SourceFile,LineNumberTable

# 指定混淆是采用的算法,后面的参数是一个过滤器

# 这个过滤器是谷歌推荐的算法,一般不做更改

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

#############################################

#

# Android开发中一些需要保留的公共部分

#

#############################################

# 保留我们使用的四大组件,自定义的Application等等这些类不被混淆

# 因为这些子类都有可能被外部调用

-keep public class * extends android.app.Activity

-keep public class * extends android.app.Appliction

-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

# 保留support下的所有类及其内部类

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

# 保留继承的

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

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

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

#androidx包使用混淆

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

-keep class androidx.** {*;}

-keep public class * extends androidx.**

-keep interface androidx.** {*;}

-dontwarn com.google.android.material.**

-dontnote com.google.android.material.**

-dontwarn androidx.**

# 保留R下面的资源

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

# 保留本地native方法不被混淆

-keepclasseswithmembernames class * {

native ;

}

# 保留在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 (android.content.Context);

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

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

!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、**On*Listener的,不能被混淆

-keepclassmembers class * {

void *(**On*Event);

void *(**On*Listener);

}

# webView处理,项目中没有使用到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);

}

########################################################################默认配置


以上为公共部分,为基础配置,另外各个项目之间bean类需要单独忽略  比如:

# 保持bean类不被混淆

-keep class com.xxx.xxx.bean.** { *; }

-keep class com.xxx.xxx.beannew.** { *; }

-keep class com.xxx.xxx.event.** { *; }


其他三方控件可根据其官方文档选择性添加  比如

#保持jar包里的类不被混淆

-keep class com.google.gson.**

# 自定义IM消息bean在other下面,不混淆会导致发送出去的消息前端收到乱码

-keep class com.blockmall.vip.other.** { *; }

# immersionbar混淆规则

-keep class com.gyf.immersionbar.* {*;}

-dontwarn com.gyf.immersionbar.**

#PictureSelector 2.0

-keep class com.luck.picture.lib.** { *; }

#Ucrop

-dontwarn com.yalantis.ucrop**

-keep class com.yalantis.ucrop** { *; }

-keep interface com.yalantis.ucrop** { *; }

#Okio

-dontwarn org.codehaus.mojo.animal_sniffer.*

# banner

# glide 的混淆代码

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

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

**[] $VALUES;

public *;

}

# banner 的混淆代码

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

#litepal

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

-keep class * extends org.litepal.crud.DataSupport { *; }

-keep class * extends org.litepal.crud.LitePalSupport { *; }

#友盟统计

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

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

-keepclassmembers class * {

public (org.json.JSONObject);

}

-keepclassmembers enum * {

public static **[] values();

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

}

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

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

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

-keep class a.** {*;}

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

#友盟分享

-dontoptimize

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

-dontwarn android.webkit.WebView

-dontwarn com.umeng.**

-keep public class javax.**

-keep public class android.webkit.**

-dontwarn android.support.v4.**

-keepattributes SourceFile,LineNumberTable

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

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

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

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

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

-dontwarn com.tencent.**

-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.android.dingtalk.share.ddsharemodule.** { *; }

# 极验SDK

-dontwarn com.geetest.sdk.**

-keep class com.geetest.sdk.**{*;}

# 高德定位

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

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

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

-keep class com.autonavi.aps.amapapi.model.**{*;}

# 极光

-dontwarn cn.jpush.**

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

-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }

-dontwarn cn.jiguang.**

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

-dontwarn com.google.**

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

# IM SDK 相关类加入不混淆名单

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

# 播放器

-keep class com.shuyu.gsyvideoplayer.video.** { *; }

-dontwarn com.shuyu.gsyvideoplayer.video.**

-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }

-dontwarn com.shuyu.gsyvideoplayer.video.base.**

-keep class com.shuyu.gsyvideoplayer.utils.** { *; }

-dontwarn com.shuyu.gsyvideoplayer.utils.**

-keep class tv.danmaku.ijk.** { *; }

-dontwarn tv.danmaku.ijk.**

你可能感兴趣的:(安卓代码混淆)