Android混淆规则

原创 2016年05月31日 15:03:13
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# 指定代码的压缩级别
-optimizationpasses 5
# 是否使用大小写混合
-dontusemixedcaseclassnames
# 是否混淆第三方jar
-dontskipnonpubliclibraryclasses
-dontoptimize
# 预校验
-dontpreverify
# 混淆时是否记录日志
-verbose
# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# 保护注解
#-keepattributes *Annotation*
#避免混淆泛型 如果混淆报错建议关掉
#-keepattributes Signature

# 保持哪些类不被混淆
-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.app.IntentService
-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 * extends android.support.v4.app.Fragment

#忽略警告
-ignorewarning

##记录生成的日志数据,gradle build时在本项目根目录输出##

#apk 包内所有 class 的内部结构
-dump class_files.txt
#未混淆的类和成员
-printseeds seeds.txt
#列出从 apk 中删除的代码
-printusage unused.txt
#混淆前后的映射
#-printmapping mapping.txt

########记录生成的日志数据,gradle build时 在本项目根目录输出-end######

#####混淆保护自己项目的部分代码以及引用的第三方jar包library#######
#-libraryjars libs/umeng-analytics-v5.2.4.jar

#三星应用市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar
#-libraryjars libs/sdk-v1.0.0.jar
#-libraryjars libs/look-v1.0.1.jar

#如果引用了v4或者v7包
-dontwarn android.support.**
-keep class android.support.** {*; }

####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####

-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*(...);
}

#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}

#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
    public <init>(android.content.Context);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆
-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();
    public void set*(***);
    public *** get*();
}

#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * {
    public void *ButtonClicked(android.view.View);
}

#不混淆资源类
-keepclassmembers class **.R$* {
    public static <fields>;
}

# 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.** { *; }

#第三方jar包
-keep class com.nostra13.universalimageloader.** { *; }
-keep class com.android.volley.** {*; }
-keep class org.apache.http.** {*; }

相关文章推荐

JAVA之代码混淆proguard基础(一)

一官方网站用法               http://proguard.sourceforge.net/index.html#/manual/examples.html...

Android 混淆代码总结

Android 混淆代码总结

Android 混淆 (不定期完善第三方混淆规则)

开启混淆在AS中,借助于SDK中自带的Proguard工具,开启混淆只需要在release闭包中添加如下两行代码: release { minifyEnabled...

android混淆

1、编译的过程遇到各种警告: 增加如下两段代码 -dontwarn com.xx.bbb.** -keep class com.xx.bbb.** { *;} 参数来保持第三方库中的类而不乱,-don...

给Android.mk添加 '-dontwarn' 属性,避开第三方jar包错误

平台 引用第三方jar包 报错, 而报错内容不影响使用,可以使用 '-dontwarn' Reading library jar [/media/bak_data/data/shengjin...

Android代码混淆之混淆规则

因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\tools\proguard目录中进行查看。...

混淆利器proguard的用法

利用java编程,最头痛的就是代码的反编译,现在的反编译工具也比较多,只要一反编译,大部分都能被还原过来。这时候,用JAVA写的PROGUARD横空出世了,它集压缩、优化、混淆于一体。下面介绍一下它的...

Android ProGuard 混淆 详解

现在写的app 基本都是经过混淆了的,如果不混淆, 发布出去,别人一反编译 就可以直接看你的源码了 ok 来说一下混淆吧: 我现在用的AndroidStudio , 只需要在 build.grad...

Android proguard 详解

本文转载于:http://blog.csdn.net/banketree/article/details/41928175 简介 Java代码是非常容易反编译的。为了很好的...

android混淆那些坑

ProGuard简介在最新的Android Studio 2.2.2版本创建的Android工程中,module中的build.gradle有如下一段配置。这里的minifyEnabled即用来控制在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android混淆规则
举报原因:
原因补充:

(最多只允许输入30个字)