我项目中添加的混淆

一、混淆

  # 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。)-optimizationpasses 5# 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名)-dontusemixedcaseclassnames# 指定不去忽略非公共的库类(不跳过library中的非public的类)-dontskipnonpubliclibraryclasses# 指定不去忽略包可见的库类的成员-dontskipnonpubliclibraryclassmembers#不进行优化,建议使用此选项,-dontoptimize# 不进行预校验,Android不需要,可加快混淆速度。-dontpreverify# 屏蔽警告-ignorewarnings# 指定混淆是采用的算法,后面的参数是一个过滤器# 这个过滤器是谷歌推荐的算法,一般不做更改-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# 保护代码中的Annotation不被混淆-keepattributes *Annotation*# 避免混淆泛型, 这在JSON实体映射时非常重要-keepattributes Signature# 抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable#优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。# 比如,当内联一个公共的getter方法时,这也可能需要外地公共访问。# 虽然java二进制规范不需要这个,要不然有的虚拟机处理这些代码会有问题。当有优化和使用-repackageclasses时才适用。#指示语:不能用这个指令处理库中的代码,因为有的类和类成员没有设计成public ,而在api中可能变成public-allowaccessmodification#当有优化和使用-repackageclasses时才适用。 #-repackageclasses com.test# 混淆时记录日志(打印混淆的详细信息)# 这句话能够使我们的项目混淆后产生映射文件# 包含有类名->混淆后类名的映射关系-verbose# ----------------------------- 默认保留 -----------------------------
# 保持哪些类不被混淆
#继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.view.View
-keep public class * extends android.app.Service
-keep class android.support.** {*;}## 保留support下的所有类及其内部类
#----------------------------------------------------
# 保留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.**
#----------------------------------------------------#这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
#表示不混淆Activity中参数是View的方法,因为有这样一种用法,在XML中配置android:onClick=”buttonClick”属性,#当用户点击该按钮时就会调用Activity中的buttonClick(View view)方法,如果这个方法被混淆的话就找不到了-keepclassmembers class * extends android.app.Activity{public void *(android.view.View);}#----------------------------------------------------# 保留枚举类不被混淆-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}
#----------------------------------------------------#表示不混淆任何一个View中的setXxx()和getXxx()方法,#因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。-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);}#----------------------------------------------------# 这指定了继承Serizalizable的类的如下成员不被移除混淆-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$* {*;}#--------------------------6.0及以上--------------------------#butterknife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewInjector{ *; }-keepclasseswithmembernames class * {@butterknife.* <fields>; }-keepclasseswithmembernames class * {@butterknife.* <methods>; }#--------------------------------------------------------==
# support-design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
#----------------------------------------------------
#不混淆资源类下static的
-keepclassmembers class **.R$* {public static <fields>;
}
#----------------------------------------------------#工具类不混淆
#-keep com.zhongyou.jiangxiplay.utils.** { *; }
#-keep com.zhongyou.jiangxiplay.util.** { *; }
#----------------------------------------------------# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
-keepclassmembers class * {void *(**On*Event);void *(**On*Listener);
}
#----------------------------------------------------# 保留我们自定义控件(继承自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);}#-------------------------阿里oss上传图片---------------------------------------keep class com.alibaba.sdk.android.oss.** { *; }-dontwarn okio.**-dontwarn org.apache.commons.codec.binary.**#---------------------------------实体类---------------------------
#--------(实体Model不能混淆,否则找不到对应的属性获取不到值)------dontwarn com.zhongyou.jiangxiplay.entity.**#对含有反射类的处理-keep class com.zhongyou.jiangxiplay.entity.** { *; }#--------(实体Model不能混淆,否则找不到对应的属性获取不到值)------dontwarn com.aliyun.vodplayerview.entity.**#对含有反射类的处理-keep class com.aliyun.vodplayerview.entity.** { *; }
#----------------------------------------------------
# Fresco
-keep class com.facebook.** {*;}
-keep interface com.facebook.** {*;}
-keep enum com.facebook.** {*;}
#----------------------------------------------------
# Glide specific rules #
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {**[] $VALUES;public *;
}#----------------------------------------------------
-keepattributes *Annotation*
-keepclassmembers class ** {@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {<init>(java.lang.Throwable);
}
# ----------------------------- 第三方库、框架、SDK -----------------------------
-dontwarn com.google.gson.**
-keep class com.google.gson.**{*;}#====okhttputils====
#-libraryjars libs/okhttputils.jar
-dontwarn com.zhy.http.**
-keep class com.zhy.http.**{*;}
-keep interface com.zhy.http.**{*;}# OkHttp3
-dontwarn okhttp3.logging.**
-keep class okhttp3.internal.**{*;}
-dontwarn okio.**
# Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
#-keepattributes Signature-keepattributes Exceptions
# 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;
}# -----------------------------阿里云视频播放器------------------------------keep class com.alivc.player.**{*;}-keep class com.aliyun.clientinforeport.**{*;}-keep class com.aliyun.vodplayer.**{*;}-dontwarn com.alivc.player.**#glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {**[] $VALUES;public *;
}

二、对抗apk重打包

1、获取apk的签名信息

    public int getSignature(String packageName){PackageManager pm=this.getPackageManager();PackageInfo packageInfo=null;int sig=0;try {packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);android.content.pm.Signature[] signatures = packageInfo.signatures;sig=signatures[0].hashCode();} catch (PackageManager.NameNotFoundException e) {sig=0;e.printStackTrace();}return  sig;}

2、验证签名,签名不一致退出程序

private static final  String TAG="signature";
if (getSignature("com.zhongyou.jiangxiplay")!=3417684655){android.os.Process.killProcess(android.os.Process.myPid());
}

三、判断是否是在模拟器上运行,如果在模拟器上运行退出应用

    private void isPhone() {if (IsMoNiQi.notHasBlueTooth()||IsMoNiQi.notHasLightSensorManager(this)||IsMoNiQi.isFeatures()||IsMoNiQi.checkIsNotRealPhone()){
//            ToastUtils.showToast(this,"检查到您的设备违规,将限制您的所有功能使用!");android.os.Process.killProcess(android.os.Process.myPid());return;}}

Android混淆和加固详解相关推荐

  1. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  2. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  3. 史上最全Android build.gradle配置详解

    Android Studio是采用gradle来构建项目的,gradle是基于groovy语言的,如果只是用它构建普通Android项目的话,是可以不去学groovy的.当我们创建一个Android项 ...

  4. android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET

    收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread  Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...

  5. android jar 包 意见反馈功能,android重点jar包详解.docx

    android重点jar包详解 深入理解View(一):从setContentView谈起 我们都知道?MVC,在Android中,这个?V?即指View,那我们今天就来探探View的究竟.在onCr ...

  6. Android应用坐标系统全面详解

    Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...

  7. Android NFC开发实战详解

    Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...

  8. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  9. android ------- 开发者的 RxJava 详解

    在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github:  https://github.com/ReactiveX/RxJava  https://githu ...

  10. Android自定义属性,format详解

    1. reference:参考某一资源ID. (1)属性定义: <declare-styleable name="名称"><attr name="bac ...

最新文章

  1. 控件的呈现方法(Rendering)的内核
  2. 一文概览 CVPR2021 最新18篇 Oral 论文
  3. Cell综述:口腔微生物群的部位特点:微米级生境与生态位
  4. SpringBoot在IDEA中实现热部署
  5. 千寻的计算机字符,转义字符变量与赋值
  6. 寒冬之下,移动开发没人要了, iOS 开发者该 何去何从?
  7. 面向项目(五)—— #pragma
  8. textview 加粗_Android 改变 TextView 内局部样式
  9. stringbuffer字符串反转操作
  10. Photoshop 2021下载链接 百度网盘
  11. 飞凌OK6410开发板加装锂电池电源管理模块
  12. [DA45] 信用卡诈骗分析
  13. 再战港交所的高视医疗,近视小伙伴的福音?
  14. 作为一名Java开发工程师需要掌握哪些专业技能
  15. 惊蛰恰逢“龙抬头”,流感高峰季来袭,你准备好了吗?
  16. [网站搭建] 阿里云搭建个人网站及域名绑定
  17. vue的组件通信,父子/子孙组件传参和方法调用
  18. 习题 8-20 懒惰的苏珊(Lazy Susan, ACM/ICPC Danang 2007, UVa1620)
  19. 解决su – 后显示-bash-4.1#
  20. 百度网盘怎么用迅雷下载文件?

热门文章

  1. knx智能照明控制系统电路图_智能照明控制系统(KNX)
  2. ug80浩强工具_浩强工具下载|浩强UG工具下载 v2.59 最新版 - 比克尔下载
  3. AD学习笔记(三)PCB封装库绘制
  4. 疯狂Java讲义第五版读书笔记
  5. Excel-工作周报(月报)【改良版】
  6. 如何用计算机计算平均温差,换热器传热计算的平均温差法.PPT
  7. sql2005数据库置疑修复断电崩溃索引损坏
  8. matlab color选取(颜色对照表)
  9. 金蝶K3销售订单自动携带客户收货信息并可修改,支持下推关联携带
  10. LTE:资源调度(5)