第一篇讲了怎么反编译,然后发现自己辛辛苦苦的结果就这样轻易的被别人破解,接下来就是代码混淆了,

1,混淆的目的和效果

代码混淆的目的就是让别人不能轻易读懂你的代码,还有精简编译后程序大小的作用,上一张图看一下混淆后的代码 就容易看懂了

 

混淆之后的代码,我们根本看不出来方法a是什么含义,所以这就是混淆的效果

2,代码混淆的使用和规则

1,使用

讲一下Androidstudio 使用混淆的配置

1,设置为true 打包的时候默认混淆代码,false则不混淆

2,混淆配置文件的名字

3,混淆的配置文件

2,规则

1,混淆的基本规则就是把不需要混淆的保存下来,其他全部都是默认混淆的

-keep class com.example.autils.*#表示这个包下所有的类都保持原状不进行混淆,而子包下的类名还是会被混淆-keep class com.example.autils.** #表示这个包下所有的类都保持原状不进行混淆,包括子包下面的类也会保持配置了上边的 ,但是方法和变量还是会被混淆,只是类名字没有被混淆-keep class com.example.bean.** { *; }#表示保持方法和变量不进行混淆-keep public class * extends android.app.Activity #所有继承android.app.Activity的类将不会进行混淆,-keepclasseswithmembernames class * {       # 保持 native 方法不被混淆      native ;  } -keepclasseswithmembers class * {       # 保持自定义控件类不被混淆    public (android.content.Context, android.util.AttributeSet);}-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆   void set*(***);   *** get*();}-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法   public void *(android.view.View);}-keepclassmembers enum * { #不混淆枚举类型中的指定方法    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量  public static final android.os.Parcelable$Creator *;}-keepclassmembers class **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段    public static ;}

2,现在就需要知道什么需要混淆,什么不需要混淆 

别的地方调用的比如系统activity,防止混淆之后找不到抛异常1,自定义控件不要混淆2,第三方库(一般第三方库都会提供混淆模板)3,枚举4,四大组件5,调用了反射的6,使用gson解析的bean类7,js调用的方法8,Parcelable 的子类9,所有fragment的子类,

3混淆简单的模板

#android 官方混淆配置###########优化精简代码###########-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*  #指定要启用和禁用的优化-optimizationpasses 5  #压缩比率  0---7-allowaccessmodification  #指定在预先处理中 类和类成员的访问性可能会扩大-dontpreverify #指定不预先验证处理类文件#-dontoptimize-dontusemixedcaseclassnames  #指定不产生混合的情况下的类名称而混淆-dontskipnonpubliclibraryclasses#-dontskipnonpubliclibraryclassmembers    #指定不去忽略包可见的库类的成员。-verbose-keepattributes SourceFile,LineNumberTable#保留行号-keepattributes *Annotation*  #保持注解-keepattributes Signature-keepattributes EnclosingMethod-keep class * extends java.lang.annotation.Annotation { *; }-keepclasseswithmembernames class * {#指定不混淆所有的jni方法    native ;}-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆   void set*(***);   *** get*();}-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法   public void *(android.view.View);}-keepclassmembers enum * { #不混淆枚举类型中的指定方法    public static **[] values();    public static ** valueOf(java.lang.String);}-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量  public static final android.os.Parcelable$Creator *;}-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();}-keepclassmembers class **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段    public static ;}-dontwarn android.support.v4.**-keep class android.support.v4.** { *; }-keep interface android.support.v4.app.** { *; }-keep public class * extends android.support.v4.**-keep public class * extends android.support.v4.app.Fragment-keep public class * extends android.support.v4.app.FragmentActivity-dontwarn android.support.** #不提示兼容库的错误警告# support design-dontwarn android.support.design.**-keep class android.support.design.** { *; }-keep interface android.support.design.** { *; }-keep public class android.support.design.R$* { *; }-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

 

 

更多相关文章

  1. Android(安卓)访问隐藏API
  2. 在Android中为啥建议你用Message.obtain()方法获取Message对象,而
  3. Android(安卓)UI设计小知识——富文本
  4. Android(安卓)TextView中标点符号或英文导致自动换行问题
  5. Launcher功能的修改及添加,本篇是一些小功能的展示,通知栏显隐,dock
  6. 《Android开发艺术探索》之学习笔记(三)View的基础知识
  7. 三种方法,刷新 Android(安卓)的 MediaStore!让你保存的图片立即出
  8. Android(安卓)launcher动态Icon的实现方法
  9. 防止Android过快点击造成多次事件的三种方法

随机推荐

  1. Android HelloWorld 例子
  2. Java Android 线程池
  3. Android 各国语言缩写-各国语言简称
  4. Android网络渗透套件—dSploit
  5. 〖Android〗简单隐藏Android虚拟键盘的方
  6. Android Studio开发准备
  7. Android自定义对话框(Custom Dialog)
  8. Android(安卓)实现可以自由移动缩放的图
  9. Android O 硬鼠导致黑屏
  10. Android:Resources资源文件