Android混淆配置
来源:互联网 发布:java框架面试题 编辑:程序博客网 时间:2024/05/16 18:42
App的builde.gradle
buildTypes { release { // 混淆 minifyEnabled true // Zipalign优化 zipAlignEnabled true // 移除无用的resource文件 shrinkResources true // 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { // 输出apk名称为appname-1.0-release-xxxx-xx-xx.apk def fileName = "app-${defaultConfig.versionName}-release-${releaseTime()}.apk" output.outputFile = new File(outputFile.parent, fileName) } } } } }
获取时间戳
def releaseTime() { def date = new Date() def formattedDate = date.format('yyyyMMdd’) return formattedDate}
对于一些基本指令的添加
//代码混淆压缩比,在0~7之间,默认为5,一般不做修改-optimizationpasses 5//混合时不使用大小写混合,混合后的类名为小写-dontusemixedcaseclassnames//指定不去忽略非公共库的类-dontskipnonpubliclibraryclasses//这句话能够使我们的项目混淆后产生映射文件//包含有类名->混淆后类名的映射关系-verbose//指定不去忽略非公共库的类成员-dontskipnonpubliclibraryclassmembers//不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。-dontpreverify//保留Annotation不混淆-keepattributes *Annotation*,InnerClasses//避免混淆泛型-keepattributes Signature//抛出异常时保留代码行号-keepattributes SourceFile,LineNumberTable//指定混淆是采用的算法,后面的参数是一个过滤器//这个过滤器是谷歌推荐的算法,一般不做更改-optimizations !code/simplification/cast,!field/*,!class/merging/*
对包下的类不进行混淆
//选一种即可#-keep class com.xxx.xxx.app.bean.** {*;}-keep public class com.xxx.xxx.bean.** { public void set*(***); public *** get*(); public *** is*();}
Android开发中一些需要保留的公共部分
//保留我们使用的四大组件,自定义的Application等等这些类不被混淆//因为这些子类都有可能被外部调用-keep public class * extends android.app.Activity-keep public class * extends android.app.Appliction-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下的所有类及其内部类-keep class android.support.** {*;}//保留继承的-keep public class * extends android.support.v4.**-keep public class * extends android.support.v7.**-keep public class * extends android.support.annotation.**# 保留R下面的资源-keep class **.R$* {*;}# 保留本地native方法不被混淆-keepclasseswithmembernames class * { native <methods>;}# 保留在Activity中的方法参数是view的方法,# 这样以来我们在layout中写的onClick就不会被影响-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}# 保留枚举类不被混淆-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}# 保留我们自定义控件(继承自View)不被混淆-keep public 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);}# 保留Parcelable序列化类不被混淆-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}# 保留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();}# 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆-keepclassmembers class * { void *(**On*Event); void *(**On*Listener);}# webView处理,项目中没有使用到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);}# 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用# 记得proguard-android.txt中一定不要加-dontoptimize才起作用# 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制-assumenosideeffects class android.util.Log { public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...);}
项目中特殊处理部分
#-----------图片加载库---------------# Glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}# Fresco-keep class com.facebook.fresco.** {*;}-keep interface com.facebook.fresco.** {*;}-keep enum com.facebook.fresco.** {*;}#Universal Image Loader-keep class com.nostra13.universalimageloader.** { *; }-keepattributes Signature#-----------网络加载库---------------# Retrofit-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions#okhttputils-dontwarn com.zhy.http.**-keep class com.zhy.http.**{*;}#okhttp-dontwarn okhttp3.**-keep class okhttp3.**{*;}#okio-dontwarn okio.**-keep class okio.**{*;}# OkHttp3-dontwarn com.squareup.okhttp3.**-keep class com.squareup.okhttp3.** { *;}-dontwarn okio.**# Okio-dontwarn com.squareup.**-dontwarn okio.**-keep public class org.codehaus.* { *; }-keep public class java.nio.* { *; }# 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;}#-----------数据解析---------------# Gson# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。-keepattributes Signature# Gson specific classes# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.** { *; }-keep class com.google.gson.** { *;}-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }# Jackson-dontwarn org.codehaus.jackson.**-dontwarn com.fasterxml.jackson.databind.**-keep class org.codehaus.jackson.** { *;}-keep class com.fasterxml.jackson.** { *; }# FastJson-libraryjars libs/fastjson-1.1.46.android.jar-dontwarn com.alibaba.fastjson.**-dontskipnonpubliclibraryclassmembers-dontskipnonpubliclibraryclasses-keep class com.alibaba.fastjson.**{*;}-keep class * implements java.io.Serializable { *; }-keepattributes Signature-keepattributes *Annotation*#-----------数据库---------# OrmLite-keepattributes *DatabaseField*-keepattributes *DatabaseTable*-keepattributes *SerializedName*-keep class com.j256.**-keepclassmembers class com.j256.** { *; }-keep enum com.j256.**-keepclassmembers enum com.j256.** { *; }-keep interface com.j256.**-keepclassmembers interface com.j256.** { *; }# Realm-keep class io.realm.annotations.RealmModule-keep @io.realm.annotations.RealmModule class *-keep class io.realm.internal.Keep-keep @io.realm.internal.Keep class * { *; }-dontwarn javax.**-dontwarn io.realm.**# GreenDao3.2.0,此是针对3.2.0,如果是之前的,可能需要更换下包名-keep class org.greenrobot.greendao.**{*;}-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABLENAME;}-keep class **$Properties#-----------地图---------# 百度地图(jar包换成自己的版本,记得签名要匹配)-libraryjars libs/baidumapapi_v2_1_3.jar-keep class com.baidu.** {*;}-keep class vi.com.** {*;}-keep class com.sinovoice.** {*;}-keep class pvi.com.** {*;}-dontwarn com.baidu.**-dontwarn vi.com.**-dontwarn pvi.com.**# 高德相关依赖 # 集合包:3D地图3.3.2 导航1.8.0 定位2.5.0-dontwarn com.amap.api.**-dontwarn com.autonavi.**-keep class com.amap.api.**{*;}-keep class com.autonavi.**{*;}# 地图服务-dontwarn com.amap.api.services.**-keep class com.map.api.services.** {*;}# 3D地图-dontwarn com.amap.api.mapcore.**-dontwarn com.amap.api.maps.**-dontwarn com.autonavi.amap.mapcore.**-keep class com.amap.api.mapcore.**{*;}-keep class com.amap.api.maps.**{*;}-keep class com.autonavi.amap.mapcore.**{*;}# 定位-dontwarn com.amap.api.location.**-dontwarn com.aps.**-keep class com.amap.api.location.**{*;}-keep class com.aps.**{*;}# 导航-dontwarn com.amap.api.navi.**-dontwarn com.autonavi.**-keep class com.amap.api.navi.** {*;}-keep class com.autonavi.** {*;}#-----------处理第三方依赖库---------# AndroidEventBus-keep class org.simple.** { *; }-keep interface org.simple.** { *; }-keepclassmembers class * { @org.simple.eventbus.Subscriber <methods>;}# Bugly-dontwarn com.tencent.bugly.**-keep class com.tencent.bugly.** {*;}# ButterKnife-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepclasseswithmembernames class * { @butterknife.* <fields>;}-keepclasseswithmembernames class * { @butterknife.* <methods>;}# EventBus-keepattributes *Annotation*-keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe <methods>;}-keep enum org.greenrobot.eventbus.ThreadMode { *; }# Facebook-keep class com.facebook.** {*;}-keep interface com.facebook.** {*;}-keep enum com.facebook.** {*;}# Retrolambda-dontwarn java.lang.invoke.*# 新浪微博-keep class com.sina.weibo.sdk.* { *; }-keep class android.support.v4.* { *; }-keep class com.tencent.* { *; }-keep class com.baidu.* { *; }-keep class lombok.ast.ecj.* { *; }-dontwarn android.support.v4.**-dontwarn com.tencent.**s-dontwarn com.baidu.**# 讯飞语音-dontwarn com.iflytek.**-keep class com.iflytek.** {*;}#-----------支付---------------# 微信支付-dontwarn com.tencent.mm.**-dontwarn com.tencent.wxop.stat.**-keep class com.tencent.mm.** {*;}-keep class com.tencent.wxop.stat.**{*;}# 银联-dontwarn com.unionpay.**-keep class com.unionpay.** { *; }# 支付宝钱包-dontwarn com.alipay.**-dontwarn HttpUtils.HttpFetcher-dontwarn com.ta.utdid2.**-dontwarn com.ut.device.**-keep class com.alipay.android.app.IAlixPay{*;}-keep class com.alipay.android.app.IAlixPay$Stub{*;}-keep class com.alipay.android.app.IRemoteServiceCallback{*;}-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}-keep class com.alipay.sdk.app.PayTask{ public *;}-keep class com.alipay.sdk.app.AuthTask{ public *;}-keep class com.alipay.mobilesecuritysdk.*-keep class com.ut.*#-----------第三方分享或统计---------------# 信鸽-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep class com.tencent.android.tpush.** {* ;}-keep class com.tencent.mid.** {* ;}-keepattributes *Annotation*# 极光推送-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }# 友盟统计分析-keepclassmembers class * { public <init>(org.json.JSONObject); }-keepclassmembers enum com.umeng.analytics.** { public static **[] values(); public static ** valueOf(java.lang.String);}# 友盟自动更新-keepclassmembers class * { public <init>(org.json.JSONObject); }-keep public class cn.irains.parking.cloud.pub.R$*{ public static final int *; }-keep public class * extends com.umeng.**-keep class com.umeng.** { *; }# ShareSDK-keep class cn.sharesdk.**{*;}-keep class com.sina.**{*;}-keep class **.R$* {*;}-keep class **.R{*;}-dontwarn cn.sharesdk.**-dontwarn **.R$*-dontwarn com.tencent.**-keep class com.tencent.** {*;}#环信SDK-keep class com.easemob.** {*;}-keep class org.jivesoftware.** {*;}-keep class org.apache.** {*;}-dontwarn com.easemob.**#2.0.9后的不需要加下面这个keep#-keep class org.xbill.DNS.** {*;}#另外,demo中发送表情的时候使用到反射,需要keep SmileUtils-keep class com.easemob.chatuidemo.utils.SmileUtils {*;}#注意前面的包名,如果把这个类复制到自己的项目底下,比如放在com.example.utils底下,应该这么写(实际要去掉#)#-keep class com.example.utils.SmileUtils {*;}#如果使用easeui库,需要这么写-keep class com.easemob.easeui.utils.EaseSmileUtils {*;}#2.0.9后加入语音通话功能,如需使用此功能的api,加入以下keep-dontwarn ch.imvs.**-dontwarn org.slf4j.**-keep class org.ice4j.** {*;}-keep class net.java.sip.** {*;}-keep class org.webrtc.voiceengine.** {*;}-keep class org.bitlet.** {*;}-keep class org.slf4j.** {*;}-keep class ch.imvs.** {*;}
来自网络整理
0 0
- android混淆配置
- android 混淆 配置
- android混淆配置
- android 混淆配置
- android 混淆配置
- android 混淆配置
- android混淆配置
- android混淆配置
- android混淆配置说明
- android 混淆配置
- android javascript 混淆配置。
- Android混淆配置
- android 混淆配置
- android 混淆配置
- Android 混淆配置
- Android混淆配置
- android 混淆配置
- Android 混淆文件配置
- Java代码中常见技术债务处理之Exception
- NYOJ 216 An problem about data
- 既使用maven编译,又使用lib下的Jar包
- Writer 类常用方法
- Python进阶(三十一)-往MySQL数据库里添加数据,update和insert哪个效率高
- Android混淆配置
- ACM刷题之HDU————I Hate It
- VS2013 打包生成安装包文件
- 高桥和低桥 CSU
- Glide的介绍及基本使用
- 二叉树的最大深度
- UML类图的阅读方法
- 【mysql】mysql select中包括计算公式
- 分类算法评价标准