Android-SDK默认混淆配置ProGuard

一.介绍

通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等)
混淆代码就能删除这些调试信息,并用无意义字符替换所有名字,增加反编译难度!

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值