proguard-rules 常用第三方库的混淆配置

转载来源http://blog.csdn.net/yuhanghate/article/details/51656804

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文件中指定混淆文件
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. buildTypes {  
  2.     release {  
  3.         minifyEnabled true  
  4.         proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
  5.     }  
  6. }  

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


第三方库及基本混淆配置

Glide配置:google官方出的图片加载库,流畅度目前最高
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keep public class * implements com.bumptech.glide.module.GlideModule  
  2. -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {  
  3.   **[] $VALUES;  
  4.   public *;  
  5. }  
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. </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.**  
  2. -keep class retrofit2.** { *; }  
  3. -keepattributes Signature  
  4. -keepattributes Exceptions  

stetho配置:Facebook出的黑科技。使用Okhttp框架支持Chrome显示app日志及数据库等数据
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keep class com.facebook.stetho.** { *; }  
  2. -dontwarn org.mozilla.javascript.**  
  3. -dontwarn org.mozilla.classfile.**  
  4. -keep class org.mozilla.javascript.** { *; }  

Gson配置:Json转POJO。官方出品的Json经典库
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keep public class com.google.gson.**  
  2. -keep public class com.google.gson.** {public private protected *;}  
  3. -keep class sun.misc.Unsafe { *; }  
  4. -keepattributes Signature  
  5. -keepattributes *Annotation*  

butterknife配置:大神JakeWharton出的View注解库。简单好用性能极高,因为没有使用反射
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keepclasseswithmembernames class * {  
  2.     @butterknife.* <fields>;  
  3. }  
  4. -keepclasseswithmembernames class * {  
  5.     @butterknife.* <methods>;  
  6. }  

View配置:系统自带和google支持库
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -dontwarn android.support.**  
  2. -dontwarn com.google.android.maps.**  
  3. -dontwarn com.slidingmenu.lib.app.SlidingMapActivity  
  4. -keep class android.support.** { *; }  
  5. -keep class com.actionbarsherlock.** { *; }  
  6. -keep interface com.actionbarsherlock.** { *; }  
  7. -keep class com.slidingmenu.** { *; }  
  8. -keep interface com.slidingmenu.** { *; }  

序列化配置:Serializable和Parcelable
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keepclassmembers class * implements java.io.Serializable {  
  2.     static final long serialVersionUID;  
  3.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  4.     private void writeObject(java.io.ObjectOutputStream);  
  5.     private void readObject(java.io.ObjectInputStream);  
  6.     java.lang.Object writeReplace();  
  7.     java.lang.Object readResolve();  
  8. }  
  9. -keep public class * implements java.io.Serializable {*;}  
  10. -keepclassmembers class * implements android.os.Parcelable {  
  11.  public <fields>;  
  12.  private <fields>;  
  13. }  
  14. -keep class * implements android.os.Parcelable {  
  15.   public static final android.os.Parcelable$Creator *;  
  16. }  

java8 retrolambda 配置:支持Java8的部分新特性。当然如果使用google自带的java8也可以,但不支持apt。详细说明请点击这里
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -dontwarn java.lang.invoke.*  

新浪微博:很草蛋,没有官方给的混淆。自己上
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.  -keep class com.sina.weibo.sdk.* { *; }  
  2. -keep class android.support.v4.* { *; }  
  3. -keep class com.tencent.* { *; }  
  4. -keep class com.baidu.* { *; }  
  5. -keep class lombok.ast.ecj.* { *; }  
  6. -dontwarn android.support.v4.**  
  7. -dontwarn com.tencent.**s  
  8. -dontwarn com.baidu.**  

Okio:基于NIO的流。大公司出品,不解释
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -dontwarn com.squareup.**  
  2. -dontwarn okio.**  
  3. -keep public class org.codehaus.* { *; }  
  4. -keep public class java.nio.* { *; }  

Ormlite配置:数据库。其实不想用这个,接手的时候用这个。有空换高性能的GreenDao2库,毕竟google在接手了稳定性及支持力度第靠谱
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keepattributes *DatabaseField*  
  2. -keepattributes *DatabaseTable*  
  3. -keepattributes *SerializedName*  
  4. -keep class com.j256.**  
  5. -keepclassmembers class com.j256.** { *; }  
  6. -keep enum com.j256.**  
  7. -keepclassmembers enum com.j256.** { *; }  
  8. -keep interface com.j256.**  
  9. -keepclassmembers interface com.j256.** { *; }  

Rxjava:很好用的库。目前国内很多项目都开始用这个了。个人推荐,赞
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -dontwarn sun.misc.**  
  2. -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {  
  3.  long producerIndex;  
  4.  long consumerIndex;  
  5. }  
  6. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {  
  7.  rx.internal.util.atomic.LinkedQueueNode producerNode;  
  8. }  
  9. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {  
  10.  rx.internal.util.atomic.LinkedQueueNode consumerNode;  
  11. }  

WebView配置
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keepclassmembers class fqcn.of.javascript.interface.for.webview {  
  2.    public *;  
  3. }  
  4. -keepclassmembers class * extends android.webkit.webViewClient {  
  5.     public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);  
  6.     public boolean *(android.webkit.WebView, java.lang.String);  
  7. }  
  8. -keepclassmembers class * extends android.webkit.webViewClient {  
  9.     public void *(android.webkit.webView, jav.lang.String);  
  10. }  

自己项目配置:使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。
注意:替换成自己工程下指定目录即可。我使用的是自己工程下
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 包名:net.shopnc.shop  
指定目录下的所有文件:net.shopnc.shop.http.params.**

 
   
  
 
  
 
 
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. -keep public class net.shopnc.shop.http.params.** {public private protected *;}  
  2. -keep public class net.shopnc.shop.http.result.** {public private protected *;}  

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值