
def releaseTime() { return new Date().format("yyyy.MM.dd", TimeZone.getTimeZone("UTC"))}androID { .... 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-beta1-xxxx-xx-xx.apk def filename = "app-${defaultConfig.versionname}-beta1-${releaseTime()}.apk" output.outputfile = new file(outputfile.parent, filename) } } } } } ....}上面注释中写到proguard-androID.txt文件,这是系统默认的混淆文件,具体在../sdk/tools/proguard/目录下,其中包含了androID最基本的混淆,一般不需要改动,我们需要配置的是项目中app下的proguard-rules.pro文件,在此提供一份混淆模板。
############################################### 对于一些基本指令的添加############################################### 代码混淆压缩比,在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/* ############################################### 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序列化的类不被混淆-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();} # 对于带有回调函数的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(...);#} ############################################### 项目中特殊处理部分############################################## #-----------处理反射类--------------- #-----------处理Js交互--------------- #-----------处理实体类---------------# 在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了。#-keep class com.blankj.data.bean.**{ *; } #-----------处理第三方依赖库---------下面介绍常用第三方混淆配置(已按字母排序,不定期更新)
# AndroIDEventBus-keep class org.simple.** { *; }-keep interface org.simple.** { *; }-keepclassmembers class * { @org.simple.eventbus.Subscriber <methods>;}# 百度地图(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.**# BRVAH-keep class com.chad.library.adapter.** { *; }-keep public class * extends com.chad.library.adapter.base.BaseQuickAdapter-keep public class * extends com.chad.library.adapter.base.BaseVIEwHolder-keepclassmembers public class * extends com.chad.library.adapter.base.BaseVIEwHolder { <init>(androID.vIEw.VIEw);}# BUGly-dontwarn com.tencent.BUGly.**-keep class com.tencent.BUGly.** {*;}# ButterKnife-keep public class * implements butterknife.Unbinder { public <init>(**, androID.vIEw.VIEw);}-keep class butterknife.*-keepclasseswithmembernames class * { @butterknife.* <methods>;}-keepclasseswithmembernames class * { @butterknife.* <fIElds>;}# Dagger2-dontwarn com.Google.errorprone.annotations.*# 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.** {*;}# FastJson-dontwarn com.alibaba.fastJson.**-keep class com.alibaba.fastJson.** { *; }-keepattributes Signature-keepattributes *Annotation*# Fresco-keep class com.facebook.fresco.** {*;}-keep interface com.facebook.fresco.** {*;}-keep enum com.facebook.fresco.** {*;}# 高德相关依赖# 集合包: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.** {*;}# GlIDe-keep public class * implements com.bumptech.glIDe.module.GlIDeModule-keep public enum com.bumptech.glIDe.load.resource.bitmap.ImageheaderParser$** { **[] $VALUES; public *;}### greenDAO 3-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String tablename; 94 }-keep class **$PropertIEs # If you do not use sqlCipher:-dontwarn org.greenrobot.greendao.database.**# If you do not use RxJava:-dontwarn rx.**# Gson-keepattributes Signature-keepattributes *Annotation*-keep class sun.misc.Unsafe { *; }-keep class com.Google.gson.stream.** { *; }# 使用Gson时需要配置Gson的解析对象及变量都不混淆。不然Gson会找不到变量。# 将下面替换成自己的实体类#-keep class com.example.bean.** { *; }# Jackson-dontwarn org.codehaus.jackson.**-dontwarn com.fasterxml.jackson.databind.**-keep class org.codehaus.jackson.** { *;}-keep class com.fasterxml.jackson.** { *; }# 极光推送-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }# Okhttp-dontwarn okio.**-dontwarn okhttp3.**-dontwarn javax.annotation.Nullable-dontwarn javax.annotation.ParametersAreNonnullByDefault# Okio-dontwarn com.squareup.** -dontwarn okio.** -keep public class org.codehaus.* { *; } -keep public class java.nio.* { *; }# 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.**# Retrofit-keep class retrofit2.** { *; }-dontwarn retrofit2.**-keepattributes Signature-keepattributes Exceptions-dontwarn okio.**-dontwarn javax.annotation.**# Retrolambda-dontwarn java.lang.invoke.*# 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;}-dontnote rx.internal.util.PlatformDependent# Universal-image-loader-v1.9.5-libraryjars libs/universal-image-loader-1.9.5-SNAPSHOT-with-sources.jar-dontwarn com.nostra13.universalimageloader.**-keep class com.nostra13.universalimageloader.** { *; }# 微信支付-dontwarn com.tencent.mm.**-dontwarn com.tencent.wxop.stat.**-keep class com.tencent.mm.** {*;}-keep class com.tencent.wxop.stat.**{*;}# 信鸽-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*# 新浪微博-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.**# XLog-keep class com.tencent.mars.** { *; }-keepclassmembers class com.tencent.mars.** { *; }-dontwarn com.tencent.mars.**# 讯飞语音-dontwarn com.iflytek.**-keep class com.iflytek.** {*;}# xUtils3.0-keepattributes Signature,Annotation-keep public class org.xutils.** {public protected *;}-keep public interface org.xutils.** {public protected *;}-keepclassmembers class * extends org.xutils.** {public protected *;}-keepclassmembers @org.xutils.db.annotation.* class * {;}-keepclassmembers @org.xutils.http.annotation. class * {*;}-keepclassmembers class * {@org.xutils.vIEw.annotation.Event ;}# 银联-dontwarn com.unionpay.**-keep class com.unionpay.** { *; }# 友盟统计分析-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.** { *; }# 支付宝钱包-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.*
详细请下载
c
总结以上是内存溢出为你收集整理的Android Studio混淆模板及常用第三方混淆全部内容,希望文章能够帮你解决Android Studio混淆模板及常用第三方混淆所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)