美文网首页
安卓代码混淆

安卓代码混淆

作者: justcodeit | 来源:发表于2020-08-28 10:59 被阅读0次

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

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

相关文章

  • 安卓代码混淆

    混淆模板: 1.混淆原则,自己写的代码比较好混淆,第三方库如果打包正式版提示如下图: 则说明混淆出错了,需要kee...

  • 安卓代码混淆

    SDK关闭混淆开关,app层开启混开关:app需要添加sdk提供的混淆规则。 # 忽略SDK包名下的所有类: -k...

  • 安卓代码混淆

    #忽略警告 不忽略可能打包不成功 -ignorewarnings #不要压缩(这个必须,因为开启混淆的时候 默认 ...

  • 安卓代码混淆

    一、代码混淆作用 令 APK 难以被逆向工程,即很大程度上增加反编译的成本; 在打包时移除无用资源,显著减少 AP...

  • 御安全浅析安卓开发代码混淆技术

    御安全浅析安卓开发代码混淆技术 【关键词:代码混淆,Android应用加固,移动应用保护,APP保护,御安全】 提...

  • 安卓产品代码混淆

    Java层代码混淆工具: proguard https://www.guardsquare.com/proguar...

  • Spring boot使用ProGuard实现代码混淆

    代码混淆常见于安卓的apk安装文件, 服务端的代码因为不易被普通用户接触到, 所以混淆不多。但是某些场景下, 比如...

  • 安卓-混淆

    混淆 1.简单介绍 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等...

  • Gson代码混淆简单使用

    时光总在指尖流逝,转眼间入了深秋了。在安卓代码编写中,代码混淆是不可少的一环,简而言之,用一套万能的混淆代码再修改...

  • 浅谈安卓开发代码混淆技术

    随着移动互联网的快速发展,应用的安全问题不断涌现出来,于是越来越多的应用开发者将核心代码由java层转到nativ...

网友评论

      本文标题:安卓代码混淆

      本文链接:https://www.haomeiwen.com/subject/gxoksktx.html