proguard-rules 混淆配置

3 篇文章 0 订阅
2 篇文章 0 订阅


Android 工程中有时候需要混淆,减少包大小及增加反编译难度。

AS中创建工程时默认创建了proguard-android.txt文件,自己如果需要增加一些第三方库需要自己在proguard-rules.txt文件中配置混淆文件。


ProGuard简介
      JAVA中默认使用ProGuard进行混淆。
ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。 
  1. 压缩(Shrink):在压缩处理这一步中,用于检测和删除没有使用的类,字段,方法和属性。 
  2. 优化(Optimize):在优化处理这一步中,对字节码进行优化,并且移除无用指令。 
  3. 混淆(Obfuscate):在混淆处理这一步中,使用a,b,c等无意义的名称,对类,字段和方法进行重命名。 
  4. 预检(Preveirfy):在预检这一步中,主要是在Java平台上对处理后的代码进行预检。 

Proguard-android使用
在Gradle.builde文件中指定混淆文件
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

如果需gradle.builde文件的基本配置, 请点击这里


第三方库及基本混淆配置

Glide配置:google官方出的图片加载库,流畅度目前最高
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
</pre><h5><span style="font-family:microsoft yahei; color:#362e2b">Retrofit 2.0配置:基于Resetful api的网络库,基于支持NIO的Okhttp。性能很高并支持Rxjava</span></h5></div><div><span style="font-family:microsoft yahei; color:#362e2b"></span><pre code_snippet_id="1715182" snippet_file_name="blog_20160613_4_6756916" name="code" class="java">-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions

stetho配置:Facebook出的黑科技。使用Okhttp框架支持Chrome显示app日志及数据库等数据
-keep class com.facebook.stetho.** { *; }
-dontwarn org.mozilla.javascript.**
-dontwarn org.mozilla.classfile.**
-keep class org.mozilla.javascript.** { *; }

Gson配置:Json转POJO。官方出品的Json经典库
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}
-keep class sun.misc.Unsafe { *; }
-keepattributes Signature
-keepattributes *Annotation*

butterknife配置:大神JakeWharton出的View注解库。简单好用性能极高,因为没有使用反射
 -keepclasseswithmembernames class * {
     @butterknife.* <fields>;
 }
 -keepclasseswithmembernames class * {
     @butterknife.* <methods>;
 }

View配置:系统自带和google支持库
-dontwarn android.support.**
-dontwarn com.google.android.maps.**
-dontwarn com.slidingmenu.lib.app.SlidingMapActivity
-keep class android.support.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.slidingmenu.** { *; }
-keep interface com.slidingmenu.** { *; }

序列化配置:Serializable和Parcelable
-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();
}
-keep public class * implements java.io.Serializable {*;}
-keepclassmembers class * implements android.os.Parcelable {
 public <fields>;
 private <fields>;
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

java8 retrolambda 配置:支持Java8的部分新特性。当然如果使用google自带的java8也可以,但不支持apt。详细说明请点击这里
-dontwarn java.lang.invoke.*

新浪微博:很草蛋,没有官方给的混淆。自己上
 -keep class com.sina.weibo.sdk.* { *; }
-keep class android.support.v4.* { *; }
-keep class com.tencent.* { *; }
-keep class com.baidu.* { *; }
-keep class lombok.ast.ecj.* { *; }
-dontwarn android.support.v4.**
-dontwarn com.tencent.**s
-dontwarn com.baidu.**

Okio:基于NIO的流。大公司出品,不解释
-dontwarn com.squareup.**
-dontwarn okio.**
-keep public class org.codehaus.* { *; }
-keep public class java.nio.* { *; }

Ormlite配置:数据库。其实不想用这个,接手的时候用这个。有空换高性能的GreenDao2库,毕竟google在接手了稳定性及支持力度第靠谱
-keepattributes *DatabaseField*
-keepattributes *DatabaseTable*
-keepattributes *SerializedName*
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }

Rxjava:很好用的库。目前国内很多项目都开始用这个了。个人推荐,赞
-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;
}

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);
}

自己项目配置:使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
注意:替换成自己工程下指定目录即可。我使用的是自己工程下
包名:net.shopnc.shop
指定目录下的所有文件:net.shopnc.shop.http.params.**

 
   
  
 
  
 
 
-keep public class net.shopnc.shop.http.params.** {public private protected *;}
-keep public class net.shopnc.shop.http.result.** {public private protected *;}

如果对ProGuard不太了解,可以查看这篇文章。 http://blog.csdn.net/ljd2038/article/details/51308768#reply


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值