不能混淆
app.gradle里面打开proguard
buildTypes{
release{
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug{
minifyEnabled false
zipAlignEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
模板
#指定压缩级别
-optimizationpasses 5
#不跳过非公共的库的类成员
-dontskipnonpubliclibraryclassmembers
#打印混淆时的详细信息
-verbose
#混淆时采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#把混淆类中的方法名也混淆了
-useuniqueclassmembernames
#优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
#将文件来源重命名为“SourceFile”字符串
-renamesourcefileattribute SourceFile
#保留行号
-keepattributes SourceFile,LineNumberTable
#保持泛型
-keepattributes Signature
#保持所有实现 Serializable 接口的类成员
-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();
}
#Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
-keep public class * extends android.support.v4.app.Fragment -keep public class * extends android.app.Fragment
# 保持测试相关的代码
-dontnote junit.framework.** -dontnote junit.runner.** -dontwarn android.test.** -dontwarn android.support.test.** -dontwarn org.junit.**
-keep class com.hs.map.shunloc.util.beanutil.**{*;}
-keep class * extends android.app.Application
-keep class org.apache.** { *; } -dontwarn org.apache.**
-keep class com.sun.mail.** { *; } -dontwarn com.sun.mail.**
-keep class java.beans.** { *; } -dontwarn java.beans.**
-keep class org.json.** { *; } -dontwarn org.json.**
-keep class java.lang.invoke.** { *; } -dontwarn java.lang.invoke.**
-keep class sun.misc.Unsafe { *; } -dontwarn sun.misc.Unsafe
-keep interface android.support.v7.** { *; } -keep class android.support.v7.** { *; } -keep interface android.support.v4.** { *; } -keep class android.support.v4.** { *; } -dontwarn android.app.Notification
常用第三方
百度地图(jar包换成自己的版本,记得签名要匹配)
-keep class com.baidu.** {*;} -keep class vi.com.** {*;} -keep class com.sinovoice.** {*;} -keep class pvi.com.** {*;} -dontwarn com.baidu.** -dontwarn pvi.com.** -dontwarn vi.com.**
pinyin4j
-dontwarn net.sourceforge.pinyin4j.** -keep class net.sourceforge.pinyin4j.**{*;} -keep class net.sourceforge.pinyin4j.format.**{*;} -keep class net.sourceforge.pinyin4j.format.exception.**{*;}
glide proguard
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
for DexGuard only
Retain generated class which implement Unbinder.
-keep public class * implements butterknife.Unbinder { public <init>(...); }
butterknife
-keep class butterknife.* -keepclasseswithmembernames class * { @butterknife.* <methods>; } -keepclasseswithmembernames class * { @butterknife.* <fields>; }
—————Begin: proguard configuration for Gson ———-
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *
-keep class com.google.gson.reflect{*
-keep class com.google.gson.**{*
# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
##---------------End: proguard configuration for Gson ----------
xUtils3.0
-keepattributes Signature,Annotation
-keep public class org.xutils.** {
public protected *;
}
-keep public interface org.xutils.** {
public protected *;
}
-keepclassmembers class * extends org.xutils.** {
public protected *;
}
-keepclassmembers @org.xutils.db.annotation.* class * {*;}
-keepclassmembers @org.xutils.http.annotation.* class * {*;}
-keepclassmembers class * {
@org.xutils.view.annotation.Event *;
}
RxJava RxAndroid
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
long producerIndex
long consumerIndex
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
rx.internal.util.atomic.LinkedQueueNode producerNode
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
rx.internal.util.atomic.LinkedQueueNode consumerNode
}
Retrofit
-dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions
Retrolambda
-dontwarn java.lang.invoke.*
OkHttp
-keep class com.squareup.okhttp.** { *
-keep interface com.squareup.okhttp.** { *
-dontwarn com.squareup.okhttp.**
OkHttp3
-dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.** { *;} -keep class okhttp3.**{*;} -dontwarn okio.** -dontwarn okhttp3.**