我们做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 来处理这个问题
就有如下的
解决方法
- -optimizationpasses 5
- -dontusemixedcaseclassnames
- -dontskipnonpubliclibraryclasses
- -dontpreverify
- -verbose
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
- -keep public class * extends android.app.Activity
- -keep public class * extends android.app.Application
- -keep public class * extends android.app.Service
- -keep public class * extends android.content.BroadcastReceiver
- -keep public class * extends android.content.ContentProvider
- -keep public class * extends android.app.backup.BackupAgentHelper
- -keep public class * extends android.preference.Preference
- -keep public class com.android.vending.licensing.ILicensingService
- -keep public class * extends android.view.View {
- public <init>(android.content.Context);
- public <init>(android.content.Context, android.util.AttributeSet);
- public <init>(android.content.Context, android.util.AttributeSet, int);
- public void set*(...);
- public void get*(...);
- }
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);
- }
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet, int);
- }
- -keepclassmembers class * implements android.os.Parcelable {
- static android.os.Parcelable$Creator CREATOR;
- }
- -keepclassmembers class **.R$* {
- public static <fields>;
- }
- -keepclasseswithmembernames class * {
- native <methods>;
- }
- #-keepnames class * implements java.io.Serializable
- -keep public class * implements java.io.Serializable {
- public *;
- }
- -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();
- }
- -dontwarn android.support.**
- -dontwarn com.alibaba.fastjson.**
- -libraryjars libs/fastjson-1.1.34.jar
- -keep class com.alibaba.fastjson.** { *; }
感谢这篇文章!!!!!!!