Android Studio 混淆代码

最近几天混淆代码遇到了一些问题,整理一下!~
首先app里面gradle里面配置一下

    buildTypes {
        release {

            buildConfigField "boolean", "LOG_DEBUG", "true"//是否输出LOG信息
            minifyEnabled true//混淆编译
            zipAlignEnabled true
            //移除无用的资源文件
            shrinkResources true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude '.readme'
    }

然后就可以在proguard-rules.pro开启混淆配置了。

1、通用的部分

-optimizationpasses 5          # 指定代码的压缩级别

-dontusemixedcaseclassnames   # 是否使用大小写混合

-dontpreverify           # 混淆时是否做预校验

-verbose                # 混淆时是否记录日志

-dontskipnonpubliclibraryclasses #指定不去忽略非公共库的类的成员

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法

-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    # 保持哪些类不被混淆


-keepattributes *Annotation* #保护代码中的Annotation不被混淆

-keepattributes Signature #避免混淆泛型

#生成映射文件
-verbose
-printmapping proguardMapping.txt
#抛出出异常的行号
-keepattributes SourceFile,LineNumberTable

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


-keepclasseswithmembers class * extends android.view.View{# 保持自定义控件类不被混淆
  *** get*();
  void set*(***);
  public <init>(android.content.Context);
   public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity { # 保留在activity的方法中参数是view的方法
    public void *(android.view.View);
}
-keepclassmembers enum * {     # 保持枚举 enum 类不被混淆
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
    public static final android.os.Parcelable$Creator *;
}

#保持support包不被混淆
-keep public class * extends android.support.**

#保持 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();
}

#保持R下的所有类及其方法,都不能被混淆
#不混淆资源类
-keepclassmembers class **.R$* {
    public static <fields>;
}

#保持onXXEvent的回调,不能被混淆
-keepclassmembers class *{
  void *(**On*Event);
}

2、每个app不同的部分

#保持自定义实体类不被混淆
-keep class com.yjjy.app.bean.** {*;}
-keep class com.yjjy.app.im.bean.** {*;}

#libaray and jar keep 第三方库或者module不被混淆
-keep class com.nostra13.universalimageloader.** { *; }
-keep class de.hdodenhof.circleimageview.** { *; }
-keep class uk.co.senab.photoview.** { *; }
-keep class com.zsoft.** { *; }
-keep class com.jungly.gridpasswordview.** { *; }
-keep class com.turbomanage.httpclient.** { *; }
-keep class cn.smssdk.** { *; }
-keep class cn.sharesdk.** { *; }
-keep class com.alipay.** {*;}
-dontwarn com.alipay.**
-keep class com.ta.utdid2.** {*;}
-keep class com.ut.device.** {*;}
-keep class org.json.alipay.** {*;}
-keep class bolts.**{*;}
-keep class com.baidu.** { *; }
-keep class com.easemob.** { *; }
-dontwarn  com.easemob.**
-keep class com.novell.sasl.client.** { *; }
-keep class com.xonami.javaBells.** { *; }
-keep class de.measite.smack.** { *; }
-keep class gov.nist.** { *; }
-keep class internal.org.apache.http.entity.mime.** { *; }
-keep class javax.sdp.** { *; }
-keep class net.java.sip.communicator.impl.** { *; }
-keep class org.** { *; }
-dontwarn org.**
-keep class jivesoftware.** { *; }
-keep class com.parse.** { *; }
-dontwarn  com.parse.**
-keep class com.mob.** { *; }
# Gson specific classes

-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *;}
-keep public class com.google.gson.** {public private protected *;}

#权限
-dontwarn com.zhy.m.**
-keep class com.zhy.m.** {*;}
-keep interface com.zhy.m.** { *; }
-keep class **$$PermissionProxy { *; }

#volley
-keep class com.android.** {*;}
-keep class com.android.volley.toolbox.ImageLoader$* { *; }
-keep class android.net.http.** { *; }
-keep class android.net.http.SslCertificate$* { *; }
-keep class android.net.http.SslError$* { *; }
-keep class download.** { *; }
-keep public class android.net.http.SslError
-keep public class android.webkit.WebViewClient
-dontwarn android.webkit.WebView
-dontwarn android.net.http.SslError
-dontwarn android.webkit.WebViewClient

#-keep class java.lang.String{*;}
# For Vitamio classes
-keep public class io.vov.vitamio.** { *; }

这里面遇到的一个问题是资源文件ID找不到的问题,但是我配置了不混淆R文件了啊,真实奇怪,最后发现clean 一下项目,重新打包就好了。

程序员内功修炼手册 不定期分享程序员基础知识,大前端知识!想跟博主一块成长的快快关注吧!

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值