我自己的android studio代码混淆打包参考

来源:互联网 发布:下载淘宝网天猫商城 编辑:程序博客网 时间:2024/06/05 19:47
自己项目中常用的代码混淆方式,仅供参考
-keepclassmembers class fqcn.of.javascript.interface.for.webview {   public *;}#指定代码的压缩级别-optimizationpasses 5#包明不混合大小写-dontusemixedcaseclassnames#不去忽略非公共的库类-dontskipnonpubliclibraryclasses-dontskipnonpubliclibraryclassmembers #预校验-dontpreverify #混淆时是否记录日志-verbose # 混淆时所采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #优化  不优化输入的类文件-dontoptimize#避免混淆泛型-keepattributes Singature#保护注解-keepattributes *Annotation-keepattributes *Annotation*-keep class com.lidroid.** { *; }-keep class * extends java.lang.annotation.Annotation { *; }# 保持哪些类不被混淆-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 com.android.vending.licensing.ILicensingService#如果有引用v4包可以添加下面这行-keep public class * extends android.support.v4.app.Fragment#忽略警告-ignorewarning##记录生成的日志数据,gradle build时在本项目根目录输出###apk 包内所有 class 的内部结构-dump proguard/class_files.txt#未混淆的类和成员-printseeds proguard/seeds.txt#列出从 apk 中删除的代码-printusage proguard/unused.txt#混淆前后的映射-printmapping proguard/mapping.txt########记录生成的日志数据,gradle build时 在本项目根目录输出-end#######如果引用了v4或者v7-dontwarn android.support.**####混淆保护自己项目的部分代码以及引用的第三方jarlibrary-end#####保持 native 方法不被混淆-keepclasseswithmembernames class * {    native <methods>;}#保持自定义控件类不被混淆-keepclasseswithmembers class * {    public <init>(android.content.Context, android.util.AttributeSet);}#保持自定义控件类不被混淆-keepclassmembers class * extends android.app.Activity {   public void *(android.view.View);}-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*(...);}#保持 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();}#保持枚举 enum 类不被混淆-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>;}#避免混淆泛型 如果混淆报错建议关掉#-keepattributes Signature#移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制#-assumenosideeffects class android.util.Log {#    public static *** v(...);#    public static *** i(...);#    public static *** d(...);#    public static *** w(...);#    public static *** e(...);#}#####################################################################################################################                 以上通用           ######################################################################################################################################################     常用第三方模块的混淆选项         ####################################gson#如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。-keepattributes Signature# Gson specific classes-keep class sun.misc.Unsafe { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.** { *; }-keep class com.google.gson.stream.** { *; }-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** { *; }# OkHttp3-dontwarn okhttp3.**-keep class okhttp3.**{*;}-dontwarn okio.**#butterknife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }#bugly-dontwarn com.tencent.bugly.**-keep public class com.tencent.bugly.**{*;}-keepclasseswithmembernames class * {    @butterknife.* <fields>;}-keepclasseswithmembernames class * {    @butterknife.* <methods>;}-dontwarn javax.annotation.**-dontwarn javax.inject.**# Retrofit-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions# 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;}#glide-dontwarn com.github.**-keep class com.github.bumptech.**{*;}#nineoldandroids-dontwarn com.nineoldandroids.**-keep class com.nineoldandroids.**{*;}#umeng-dontwarn com.umeng.**-keep class com.umeng.**{*;}#litepal-dontwarn org.litepal.**-keep class org.litepal.**{*;}-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-dontwarn cn.jiguang.**-keep class cn.jiguang.** { *; }-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }-libraryjars libs/badgeview.jar-libraryjars libs/umeng_social_api.jar-libraryjars libs/umeng_social_net.jar-libraryjars libs/umeng_social_tool.jar
原创粉丝点击