美文网首页
Android-SDK默认混淆配置ProGuard

Android-SDK默认混淆配置ProGuard

作者: lioilwin | 来源:发表于2017-08-27 16:46 被阅读193次

    一.介绍

    通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等)
    混淆代码就能删除这些调试信息,并用无意义字符替换所有名字,增加反编译难度!
    
    ProGuard是一个混淆Java代码的开源项目,主要作用如下:
        混淆Obfuscate 用无意义字符替换类名/字段名/属性名/方法名等
        压缩Shrink 移除无用类/字段/属性/方法
        优化Optimize 移除无用字节码指令
        预检preverify 预检字节码,确保可执行
    

    二.混淆配置

    在Android studio/build.gradle中
    android {
        ...
        buildTypes {
            release {
                //开启混淆/压缩
                minifyEnabled true
    
                //proguard-android.txt是Android SDK默认混淆配置文件,
                //proguard-rules.pro是我们自定义混淆配置文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }   
    

    1.自定义混淆文件proguard-rules.pro

    
    #基本指令----------------------------------
    -printmapping proguardMapping.txt #输出混淆前后代码映射关系
    -keepattributes Signature #保留泛型
    # -renamesourcefileattribute 重命名源码文件.java #崩溃抛出异常时,源码文件名自定义
    -keepattributes SourceFile, LineNumberTable #崩溃抛出异常时,保留源码文件名和源码行号
     
    #移除log代码
    #确保没有开启--dontoptimize选项
    #默认混淆文件不要用proguard-android.txt,应该用proguard-android-optimize.txt
    #assume no side effects假定无效, 标识无效代码
    -assumenosideeffects class android.util.Log {
        public static int v(...);
        public static int d(...);
        public static int i(...);
    }
    
    

    2.Android SDK默认混淆文件proguard-android.txt

    AndroidSDK\tools\proguard\proguard-android.txt
                             \proguard-android-optimize.txt                          
    其中proguard-android是不开启优化的配置文件
        proguard-android-optimize.tx是开启优化的配置文件
    
    
    #1.在proguard-android-optimize.txt中——————————————————————————————
    #开启优化
    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
    -optimizationpasses 5
    -allowaccessmodification
    
    ......剩下部分同proguard-android.txt
    
    
    
    #2.在proguard-android.txt中———————————————————————————————————————
    #不开启优化, 会导致-assumenosideeffects无法去除log代码
    #如果要用-assumenosideeffects去除log代码,默认混淆文件应该选proguard-android-optimize.txt
    -dontoptimize 
    
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -verbose
    -dontpreverify
    -keepattributes *Annotation*
    
    -keep public class com.google.vending.licensing.ILicensingService
    -keep public class com.android.vending.licensing.ILicensingService
    
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    
    -keepclassmembers public class * extends android.view.View {
       void set*(***);
       *** get*();
    }
    
    -keepclassmembers class * extends android.app.Activity {
       public void *(android.view.View);
    }
    
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    -keepclassmembers class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator CREATOR;
    }
    
    -keepclassmembers class **.R$* {
        public static <fields>;
    }
    
    -dontwarn android.support.**
    
    -keep class android.support.annotation.Keep
    
    -keep @android.support.annotation.Keep class * {*;}
    
    -keepclasseswithmembers class * {
        @android.support.annotation.Keep <methods>;
    }
    
    -keepclasseswithmembers class * {
        @android.support.annotation.Keep <fields>;
    }
    
    -keepclasseswithmembers class * {
        @android.support.annotation.Keep <init>(...);
    }
    
    

    简书: http://www.jianshu.com/p/c667764f1f3a
    CSDN博客: http://blog.csdn.net/qq_32115439/article/details/72785344
    GitHub博客:http://lioil.win/2017/05/27/Android_ProGuard.html
    Coding博客:http://c.lioil.win/2017/02/27/Android_ProGuard.html

    相关文章

      网友评论

          本文标题:Android-SDK默认混淆配置ProGuard

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