Android proguard(混淆)模板
16lz
2021-01-23
- 不能混淆
- appgradle里面打开proguard
- 模板
- 常用第三方
- 百度地图jar包换成自己的版本记得签名要匹配
- pinyin4j
- glide proguard
- for DexGuard only
- Retain generated class which implement Unbinder
- butterknife
- Begin proguard configuration for Gson -
- xUtils30
- RxJava RxAndroid
- Retrofit
- Retrolambda
- OkHttp
- OkHttp3
不能混淆
- 在AndroidManifest中配置的类,比如四大组件
- JNI调用的方法
- 反射用到的类
- WebView中JavaScript调用的方法
- Layout文件引用到的自定义View
- 一些引入的第三方库(一般都会有混淆说明的)(没说明就把整个包不混淆或自己根据不能混淆的规则去写)
推荐两个开源项目,里面收集了一些第三方库的混淆规则
android-proguard-snippets
android-proguard-cn
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
#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
Retain generated class which implement Unbinder.
-keep public class * implements butterknife.Unbinder { public (...); }
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.**
更多相关文章
- Android 自定义Dialog时出现成员变量为null的问题
- Android依赖库版本不一致
- appcompat-v7 版本造成的问题No resource found that matches th
- Android Studio版本控制指南
- Android各版本适配之8.0
- 获取Android当前网络类型(2g、3g、4g、wifi)以及手机型号、版本号