Android混淆配置
来源:互联网 发布:cf刷枪软件视频教程 编辑:程序博客网 时间:2024/06/06 23:57
直接查看proguard-rules.pro文件
Android混淆配置
1. 基本指令
# 代码混淆压缩比,在0~7之间,默认为5,一般不需要改-optimizationpasses 5# 混淆时不使用大小写混合,混淆后的类名为小写-dontusemixedcaseclassnames# 指定不去忽略非公共的库的类-dontskipnonpubliclibraryclasses# 指定不去忽略非公共的库的类的成员-dontskipnonpubliclibraryclassmembers# 不做预校验,可加快混淆速度# preverify是proguard的4个步骤之一# Android不需要preverify,去掉这一步可以加快混淆速度-dontpreverify# 不优化输入的类文件-dontoptimize# 混淆时生成日志文件,即映射文件-verbose# 指定映射文件的名称-printmapping proguardMapping.txt#混淆时所采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*# 保护代码中的Annotation不被混淆-keepattributes *Annotation*# 忽略警告-ignorewarning# 保护泛型不被混淆-keepattributes Signature# 抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable
2. 需要保留的东西
# 保留所有的本地native方法不被混淆-keepclasseswithmembernames class * { native <methods>;}# 保留了继承自Activity、Application、Fragment这些类的子类-keep public class * extends android.app.Fragment-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 * extends android.view.View-keep public class com.android.vending.licensing.ILicensingService# support-v4-dontwarn android.support.v4.**-keep class android.support.v4.** { *; }-keep interface android.support.v4.** { *; } -keep public class * extends android.support.v4.**# 保持自定义控件类不被混淆,指定格式的构造方法不去混淆 -keepclasseswithmembers class * { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); }# 保持自定义控件类不被混淆-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*(...); *** get*();}# 保留在Activity中的方法参数是View的方法# 从而我们在layout里边编写onClick就不会被影响-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}# 保留枚举 enum 类不被混淆-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}# 保留 Parcelable 不被混淆-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}# 保留 Serializable 不被混淆-keepnames class * implements java.io.Serializable-keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; !private <fields>; !private <methods>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve();}# 不混淆资源类-keepclassmembers class **.R$* { *; }# 对于带有回调函数onXXEvent()的,不能被混淆-keepclassmembers class * { void *(**On*Event);}# WebView-keepclassmembers class fqcn.of.javascript.interface.for.Webview { public *;}-keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); public boolean *(android.webkit.WebView, java.lang.String);}-keepclassmembers class * extends android.webkit.WebViewClient { public void *(android.webkit.WebView, jav.lang.String);}
3. App定制
# 保留实体类和成员不被混淆(根据具体情况修改entity的路径)-keep class com.your_path.entity.**{*;}# 与js交互。其中MyJavaScriptInterface表示有@JavascriptInterface注解的内部类,具体可根据实际路径改变-keep public class com.mypackage.MyClass$MyJavaScriptInterface-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { <methods>; }
4. 第三方框架(具体参考最新官方文档)
常用框架的混淆配置
4.1 ButterKnife 8.8.1 官方文档
# ButterKnife 8.8.1-keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }-keep class butterknife.*-keepclasseswithmembernames class * { @butterknife.* <methods>; }-keepclasseswithmembernames class * { @butterknife.* <fields>; }
4.2 greenDAO 3.2.2 官方文档
# 4.2 greenDAO 3.2.2-dontwarn org.greenrobot.greendao.database.**-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { public static java.lang.String TABLENAME;}-keep class **$Properties
4.3 Glide 4.0.0 官方文档
# Glide 4.0.0-keep public class * implements com.bumptech.glide.module.GlideModule-keep public class * extends com.bumptech.glide.AppGlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}
4.4 Gson 2.8.1 官方文档
##---------------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.** { *; }# 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 ----------
4.5 百度地图
-keep class com.baidu.** {*;}-keep class vi.com.** {*;}-dontwarn com.baidu.**
4.6 okhttp
# okhttp-dontwarn okhttp3.**-keep class okhttp3.**{*;}# okio-dontwarn okio.**-keep class okio.**{*;}
持续更新中…
参考:
https://stackoverflow.com/questions/6271485/android-proguard-javascript-interface-fail
阅读全文
1 0
- android混淆配置
- android 混淆 配置
- android混淆配置
- android 混淆配置
- android 混淆配置
- android 混淆配置
- android混淆配置
- android混淆配置
- android混淆配置说明
- android 混淆配置
- android javascript 混淆配置。
- Android混淆配置
- android 混淆配置
- android 混淆配置
- Android 混淆配置
- Android混淆配置
- android 混淆配置
- Android 混淆文件配置
- 如何将本地项目上传至GitHub
- html5 视频播放及border
- 什么是僵尸进程?
- java反射
- jdbc存储过程
- Android混淆配置
- scala中xml修改元素详解
- 安卓运行时错误java.lang.NoClassDefFoundError分析
- window两个屏幕问题
- Python学习笔记 --- python求昨天的时间
- 朋友数(PAT-1064)
- 丰富
- Ubuntu下编译VLC Android源码so库详解
- Tomcat编译JSP页面生成Servlet文件(*.class & *.java)的存放位置