Android混淆配置
发布日期:2021-06-07 09:28:29 浏览次数:81 分类:技术文章

本文共 5897 字,大约阅读时间需要 19 分钟。

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
;}# 保留了继承自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
(android.content.Context); public
(android.content.Context, android.util.AttributeSet); public
(android.content.Context, android.util.AttributeSet, int); }# 保持自定义控件类不被混淆-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*(...); *** 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
; !private
; !private
; 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 {
; }

4. 第三方框架(具体参考最新官方文档)

常用框架的混淆配置

4.1 ButterKnife 8.8.1

# ButterKnife 8.8.1-keep public class * implements butterknife.Unbinder { public 
(**, android.view.View); }-keep class butterknife.*-keepclasseswithmembernames class * { @butterknife.*
; }-keepclasseswithmembernames class * { @butterknife.*
; }

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://blog.csdn.net/Next_Second/article/details/77771550 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:RecyclerView的用法
下一篇:百度地图官方Demo

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 09时33分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章