您的位置:首页 > 移动开发 > Android开发

Android 混淆问题记录can't find superclass or interface

2016-10-09 19:07 363 查看
今天用了AS混淆项目,工程使用了fastjson解析数据,混淆出现以下问题:

Warning:com.alibaba.fastjson.support.jaxrs.FastJsonProvider: can't find superclass or interface javax.ws.rs.ext.MessageBodyReader
Warning:com.alibaba.fastjson.support.jaxrs.FastJsonProvider: can't find superclass or interface javax.ws.rs.ext.MessageBodyWriter
Warning:com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter: can't find superclass or interface org.springframework.http.converter.AbstractHttpMessageConverter
Warning:com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter: can't find superclass or interface org.springframework.http.converter.GenericHttpMessageConverter
Warning:com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4: can't find superclass or interface org.springframework.http.converter.AbstractGenericHttpMessageConverter
Warning:com.alibaba.fastjson.support.spring.FastJsonJsonView: can't find superclass or interface org.springframework.web.servlet.view.AbstractView
Warning:com.alibaba.fastjson.support.spring.FastjsonSockJsMessageCodec: can't find superclass or interface org.springframework.web.socket.sockjs.frame.AbstractSockJsMessageCodec
Warning:retrofit.RxSupport$1: can't find superclass or interface rx.Observable$OnSubscribe
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.ZonedDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.OffsetDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.OffsetTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.ZoneId
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Period
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Duration
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Instant
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.temporal.TemporalAccessor
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.ZonedDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.OffsetDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.OffsetTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.ZoneId
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Period
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Duration
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.Instant
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDate
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.LocalDateTime
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.temporal.TemporalAccessor
Warning:com.alibaba.fastjson.parser.deserializer.Jdk8DateCodec: can't find referenced class java.time.format.DateTimeFormatter
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalInt
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalLong
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalDouble
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.Optional
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalDouble
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalInt
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalLong
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.Optional
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalDouble
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalInt
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.OptionalLong
Warning:com.alibaba.fastjson.parser.deserializer.OptionalCodec: can't find referenced class java.util.Optional
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Point
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Rectangle
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Font
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Color
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Point
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Font
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Rectangle
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Color
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Font
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Color
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Rectangle
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Point
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Font
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Rectangle
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Color
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Font
Warning:com.alibaba.fastjson.serializer.AwtCodec: can't find referenced class java.awt.Color


然后网上查找一下,发现都说加上-keep class javax.ws.rs.* { ; }

和-ignorewarnings就可以了

#忽略警告
-ignorewarnings
-keep class javax.ws.rs.** { *; }
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }


然后发现也不行,一直在混淆中,1个小时过去提示:

PSI and index do not match:PSI and index do not match

又按网上说的Invalidate Caches/Restart…

还是不行!



后面发现build.gradle配置的问题!!!

getDefaultProguardFile(‘proguard-android.txt’), “proguard-rules.pro”

一定要加一个”proguard-rules.pro”,之前一直把混淆放在proguard-android.txt:getDefaultProguardFile(‘proguard-android.txt’)。

proguard-rules.pro名字可以随便取,然后把混淆放里面!

buildTypes {
release {
buildConfigField "boolean", "LOG_DEBUG", "false"  // 不显示Log
minifyEnabled true  // 混淆
//            shrinkResources true // 移除无用的resource文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro"
signingConfig signingConfigs.release
//            defaultConfig {
//            }
}
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"  // 显示Log
signingConfig signingConfigs.debug
//            defaultConfig {
//            }
}
}


proguard-rules.pro内容:

#不压缩输入的类文件
-dontshrink
#指定代码的压缩级别
-optimizationpasses 5
#包明不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化  不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#保护注解
-keepattributes *Annotation*
#忽略警告
-ignorewarnings

-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 com.google.vending.licensing.ILicensingService   # 保持哪些类不被混淆

-keepclassmembers class **.R$* {
public static <fields>;
public static final int *;
}
-keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
native <methods>;
}
-keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定义控件类不被混淆
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
public void *(android.view.View);
}
-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
}

-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*(...);
}
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}

#apk 包内所有 class 的内部结构
#-dump class_files.txt
#未混淆的类和成员
#-printseeds seeds.txt
#列出从 apk 中删除的代码
#-printusage unused.txt
#混淆前后的映射
#-printmapping mapping.txt

#fastjson 可以混淆也可以不混淆
#-keep class javax.ws.rs.** { *; }
#-dontwarn com.alibaba.fastjson.**
#-keep class com.alibaba.fastjson.** { *; }
-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();
public <fields>;
}
-keepattributes Signature

#gson
-dontwarn com.google.gson.**
-keep class com.google.gson.** { *;}
-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();
public <fields>;
}

#v4
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment

#greendao
#-dontwarn de.greenrobot.dao.**
#-keep class de.greenrobot.dao.** { *;}
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android as 混淆
相关文章推荐