Android 第三方Jar包FastJson 代码混淆时的解决方法

我们做AndroidApp软件的时候,经常会对App进行签名打包和代码混淆,在工程中没有使用第三方Jar文件的时候不用考虑很多因素,现在要说的是当你在你的工程使用使用了FastJson这个快速解析Json数据的Jar后进行代码混淆出现问题的解决方法


fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。

主要特点:

  • 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
  • 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  • 零依赖(没有依赖其它任何类库除了JDK)

下载地址
点击打开链接

我们在进行fastjson.jar 代码混淆的时候需要考虑的问题有如下四点:
第一步想到是不能 混淆了fastjson.jar包里面类的结构
第二步是fastjson.jar使用时经常使用数据对象序列化传递,那么我们就不能让工程中的实现 java.io.Serializable的实体类中所有的属性名称也不能被 混淆
第三步是以及为了序列化和反序列化,writeObject(); readObject(); writeReplace(); readResolve();亦不可被 混淆
第四步是在 混淆时发现fastjson.jar中依赖了一些javaee方面的类,但是android本身是没有这些类的,那么就使用了-dontwarn 来处理这个问题
就有如下的 解决方法

查看文本 打印 ?
  1. -optimizationpasses 5  
  2. -dontusemixedcaseclassnames  
  3. -dontskipnonpubliclibraryclasses  
  4. -dontpreverify  
  5.   
  6. -verbose  
  7. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  8.   
  9. -keep public class * extends android.app.Activity  
  10. -keep public class * extends android.app.Application  
  11. -keep public class * extends android.app.Service  
  12. -keep public class * extends android.content.BroadcastReceiver  
  13. -keep public class * extends android.content.ContentProvider  
  14. -keep public class * extends android.app.backup.BackupAgentHelper  
  15. -keep public class * extends android.preference.Preference  
  16. -keep public class com.android.vending.licensing.ILicensingService  
  17.   
  18. -keep public class * extends android.view.View {  
  19.     public (android.content.Context);  
  20.     public (android.content.Context, android.util.AttributeSet);  
  21.     public (android.content.Context, android.util.AttributeSet, int);  
  22.     public void set*(...);  
  23.     public void get*(...);  
  24. }  
  25.   
  26. -keepclasseswithmembers class * {  
  27.     public (android.content.Context, android.util.AttributeSet);  
  28. }  
  29.   
  30. -keepclasseswithmembers class * {  
  31.     public (android.content.Context, android.util.AttributeSet, int);  
  32. }  
  33.   
  34. -keepclassmembers class * implements android.os.Parcelable {  
  35.     static android.os.Parcelable$Creator CREATOR;  
  36. }  
  37.   
  38. -keepclassmembers class **.R$* {  
  39.     public static ;  
  40. }  
  41.   
  42. -keepclasseswithmembernames class * {  
  43.     native ;  
  44. }  
  45.   
  46. #-keepnames class * implements java.io.Serializable  
  47.   
  48. -keep public class * implements java.io.Serializable {  
  49.     public *;  
  50. }  
  51.   
  52. -keepclassmembers class * implements java.io.Serializable {  
  53.     static final long serialVersionUID;  
  54.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  55.     private void writeObject(java.io.ObjectOutputStream);  
  56.     private void readObject(java.io.ObjectInputStream);  
  57.     java.lang.Object writeReplace();  
  58.     java.lang.Object readResolve();  
  59. }  
  60.   
  61. -dontwarn android.support.**  
  62. -dontwarn com.alibaba.fastjson.**  
  63.   
  64. -libraryjars libs/fastjson-1.1.34.jar  
查看文本 打印 ?
  1. -keep class com.alibaba.fastjson.** { *; }  


转载自:http://www.verydemo.com/demo_c131_i167486.html
感谢这篇文章!!!!!!!

你可能感兴趣的:(Android 第三方Jar包FastJson 代码混淆时的解决方法)