关于proguard配置文件的一个笨办法,一次性排除大部分外部依赖

关于proguard这个东西,感觉做的一般般,很多配置很不人性化,容错性差,像个事妈一样总报错,屁大点事就把整个流程挂掉,搞得学习成本很高,实在难以称道。

比如,proguard配置中的keep class 和dontwarn就很变扭,为什么不提供一个only include class或者only warn之类的配置,其实针对大多数app,我们只需要对我们关心的一些类进行混淆就可以了,所以这不是一个排除或者取非的问题。由于这一点,导致我们每次要写一大堆的keep class 和dontwarn,本人分享一种写法(虽然是傻瓜式的笨办法),一种思路,可以一次性排除大部分外部依赖。

思路大概是,如果我们只需要对com.yoyo.brucesharp.app这个包下的类进行proguard,那么可以把其他包名的一律排除掉就可以了,于是就有了下面的模板(写的不是很严谨,重在提供解决问题的思路,大家可以拷走方便备用)。

####外部库
-keep class a** { *; }
-keep class b** { *; }
##c开头不排除
-keep class d** { *; }
-keep class e** { *; }
-keep class f** { *; }
-keep class g** { *; }
-keep class h** { *; }
-keep class i** { *; }
-keep class j** { *; }
-keep class k** { *; }
-keep class l** { *; }
-keep class m** { *; }
-keep class n** { *; }
-keep class o** { *; }
-keep class p** { *; }
-keep class q** { *; }
-keep class r** { *; }
-keep class s** { *; }
-keep class t** { *; }
-keep class u** { *; }
-keep class v** { *; }
-keep class w** { *; }
-keep class x** { *; }
-keep class y** { *; }
-keep class z** { *; }
-keep class com.a** { *; }
-keep class com.b** { *; }
-keep class com.c** { *; }
-keep class com.d** { *; }
-keep class com.e** { *; }
-keep class com.f** { *; }
-keep class com.g** { *; }
-keep class com.h** { *; }
-keep class com.i** { *; }
-keep class com.j** { *; }
-keep class com.k** { *; }
-keep class com.l** { *; }
-keep class com.m** { *; }
-keep class com.n** { *; }
-keep class com.o** { *; }
-keep class com.p** { *; }
-keep class com.q** { *; }
-keep class com.r** { *; }
-keep class com.s** { *; }
-keep class com.y** { *; }
-keep class com.u** { *; }
-keep class com.v** { *; }
-keep class com.w** { *; }
-keep class com.x** { *; }
#com.y开头不排除
-keep class com.z** { *; }
#单独排除cn开头的
-keep class cn** { *; }

####dontwarn
-dontwarn a**
-dontwarn b**
-dontwarn d**
-dontwarn e**
-dontwarn f**
-dontwarn g**
-dontwarn h**
-dontwarn i**
-dontwarn j**
-dontwarn k**
-dontwarn l**
-dontwarn m**
-dontwarn n**
-dontwarn o**
-dontwarn p**
-dontwarn q**
-dontwarn r**
-dontwarn s**
-dontwarn t**
-dontwarn u**
-dontwarn v**
-dontwarn w**
-dontwarn x**
-dontwarn y**
-dontwarn z**
-dontwarn com.a**
-dontwarn com.b**
-dontwarn com.d**
-dontwarn com.e**
-dontwarn com.f**
-dontwarn com.g**
-dontwarn com.h**
-dontwarn com.i**
-dontwarn com.j**
-dontwarn com.k**
-dontwarn com.l**
-dontwarn com.m**
-dontwarn com.n**
-dontwarn com.o**
-dontwarn com.p**
-dontwarn com.q**
-dontwarn com.r**
-dontwarn com.s**
-dontwarn com.t**
-dontwarn com.u**
-dontwarn com.v**
-dontwarn com.w**
-dontwarn com.x**
-dontwarn com.c**
-dontwarn com.z**
#单独排除一下cn开头的
-dontwarn cn**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ProGuard一个可以帮助我们混淆、缩减和优化 Android 应用程序的工具。在使用 ProGuard 时,我们需要配置一个 proguard-rules.pro 文件,告诉 ProGuard 应该如何处理我们的代码。下面是一个简单的 ProGuard 配置文件示例: ``` # 优化选项 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose # 混淆选项 -keepattributes Signature -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile -keepattributes *Annotation*,EnclosingMethod # 忽略不需要混淆的类或方法 -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 -keep public class org.apache.commons.logging.LogFactory { public static ** getLog(java.lang.String); } # 忽略不需要混淆的库 -dontwarn android.support.** -dontwarn com.google.android.gms.** -dontwarn org.apache.commons.logging.** # 压缩选项 -optimizations !code/simplification/cast,!field/*,!class/merging/* -dontoptimize ``` 这个配置文件包含了优化选项、混淆选项、忽略不需要混淆的类或方法、忽略不需要混淆的库和压缩选项。我们可以根据自己的需求进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值