FreeProGuard 为方便广大 Android 开发者们今后防混淆配置,很久之前便有打算做这个免混淆库了,只是拖到最近才有空来实现该库,该库利用了 consumerProguardFiles
来传递 aar 中的防混淆配置到主工程中,所以依赖了该库后常用的主流三方库便不再需要开发者们手动配置了,当然,有些友善的库已采用了该方式,我也希望更多的开源库使用该方式从而省去开发者配置防混淆,本库已配置了如下防混淆文件(包括库的不同版本):
- AndroidCommon
- AliPay(需防混 jar(-libraryjars libs/alipaySDK-20150602.jar))
- AndFix
- AndroidEventBus
- AndroidUniversalImageLoader
- ARouter
- BaiduMap(需防混 jar(-libraryjars libs/baidumapapi_v2_1_2.jar))
- BaseRecyclerViewAdapterHelper
- Bugly
- ButterKnife
- Dagger
- EventBus
- Fastjson
- Fresco
- GaoDeMap
- Getui
- Glide
- GreenDAO
- Gson
- Ijkplayer
- Guava
- Jackson
- JPush
- LitePal
- Mars
- MiPush
- Nuwa
- OkHttp
- PingPlusPlus
- Realm
- Retrofit
- Retrolambda
- RongCloud
- RxJava
- ShareSDK
- SinaWeiboSDK
- Stetho
- Tencent
- UMeng
- UnionPay
- Volley
- XinGe
- XunFei
- ZXing
- 首先开启混淆,设置
minifyEnabled true
; - 添加依赖:
implementation "com.blankj:free-proguard:0.0.8"
- 把项目中的实体类加入到
proguard-rules.pro
文件中,一般为-keep class urpackage.xx.bean/entity/model.** { *; }
,或者使用@Keep
注解这些实体类; - 把项目中需要防混淆的 jar 加入到
proguard-rules.pro
文件中,比如支付宝 SDK 的-libraryjars libs/alipaySDK-20150602.jar
,如果要对所有 jar 都防混,那么使用-libraryjars libs
即可; - 把项目中用到的一些不包括在如上列表中的三方库配置到
proguard-rules.pro
文件中,或者提 issue 使其加入到本库中来(小众或者冷门的不予合入哦)。
- 开启混淆会将代码中的所有变量、函数、类的名称变为简短的英文字母代号(也可自定义),在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读,提升应用的安全性;
- 混淆通过分析字节码,去掉冗余代码,再加上缩短了变量、函数、类的名称,可以进一步缩减应用大小,如果想混淆资源文件,可以使用微信的 AndResGuard。
如果该库能为你节省 10 分钟甚至更多的时间,请把它分享给他人来帮助更多的开发者们节省时间,这些时间可以多陪伴家人、多运动、多做自己喜欢的事情,希望开源可以帮助到更多的人,也希望更多的人加入到开源中来。