編輯:關於Android編程
今天用了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’)。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPnByb2d1YXJkLXJ1bGVzLnByb8P719a/ydLUy+ax48iho6zIu7rzsNG77M/9t8XA78Pmo6E8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">
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 ;
public static final int *;
}
-keepclasseswithmembernames class * { # 保持 native 方法不被混淆
native ;
}
-keepclasseswithmembers class * { # 保持自定義控件類不被混淆
public (android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {# 保持自定義控件類不被混淆
public (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 (android.content.Context);
public (android.content.Context, android.util.AttributeSet);
public (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 ;
}
-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 ;
}
#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
ListView懸浮頭部展現效果
先看下效果:需求是 滑動列表 ,其中一部分視圖(粉絲數,關注數這一部分)在滑動到頂端的時候不消失,而是停留在整個界面頭部。 我們先分析要解決的問題:1、如何實現
深入分析Android ViewStub的應用詳解
在開發應用程序的時候,經常會遇到這樣的情況,會在運行時動態根據條件來決定顯示哪個View或某個布局。那麼最通常的想法就是把可能用到的View都寫在上面,先把它們的可見性都
Android獲取設備隱私 忽略6.0權限管理
一.前言(1).由於MIUI等部分國產定制系統也有權限管理,沒有相關api,故無法判斷用戶是否允許獲取聯系人等隱私。在Android 6.0之後,新增權限管理可以通過官方
Android進程通信之Messenger和AIDL使用詳解
1. 前言提到的進程間通信(IPC:Inter-Process Communication),在Android系統中,一個進程是不能直接訪問另一個進程的內存的,需要提供一