Android应用开发之android混淆问题解析
凌雪 2018-10-10 来源 :网络 阅读 1095 评论 0

摘要:本文将带你了解Android应用开发之android混淆问题解析,希望本文对大家学Android有所帮助。

本文将带你了解Android应用开发之android混淆问题解析,希望本文对大家学Android有所帮助。


应用开发完了,测试没问题了,快上市场了,这时候就要混淆加固多渠道打包加上线了,所以,混淆就来了:
      混淆是什么,就是把类名,方法名,变量名给弄成简单的单词或者字母来代替,从而防止别人反编译后轻松的得到源码。与其说我们配置混淆,不如说我们来配置哪些包里面的哪些类不要被混淆,也就是在下面的那个文件里声明一下,哪些不要给我混淆:
    1.在module的build.gradle的android标签里
buildTypes { release   {  signingConfig   signingConfigs.<strong>release</strong><strong>    </strong>shrinkResources   <strong>true</strong><strong>    </strong>minifyEnabled <strong>true</strong><strong>    </strong>zipAlignEnabled   <strong>true</strong><strong>    </strong>proguardFiles   getDefaultProguardFile(<strong>'proguard-android.txt'</strong>),   <strong>'proguard-rules.pro'</strong><strong></strong><strong>   </strong>}  debug {  signingConfig   signingConfigs.<strong>release</strong><strong>    </strong>shrinkResources <strong>true</strong><strong>    </strong>minifyEnabled   <strong>true</strong><strong>    </strong>zipAlignEnabled   <strong>true</strong><strong>    </strong>proguardFiles getDefaultProguardFile(<strong>'proguard-android.txt'</strong>),   <strong>'proguard-rules.pro'</strong><strong>   </strong>} }
    2.在proguard-rules.pro里
?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113<strong>-optimizationpasses   </strong>5 <em># 指定代码的压缩级别</em><strong>-dontusemixedcaseclassnames</strong><em>#   是否使用大小写混合</em><strong>-dontpreverify    </strong><em># 混淆时是否做预校验</em><strong>-verbose </strong><em># 混淆时是否记录日志</em><strong>-optimizations   </strong>!code/simplification/arithmetic,!field/*,!class/merging/*    <em># 混淆时所采用的算法</em><em>#glide混淆</em><strong>-keep   </strong>public class * implements   com.bumptech.glide.module.GlideModule<strong>-keep   </strong>public class * extends   com.bumptech.glide.module.AppGlideModule<strong>-keep   </strong>public enum com.bumptech.glide.load.ImageHeaderParser$**   {<strong>  **[] $VALUES;</strong><strong>  public   *;</strong>} <em># for DexGuard   only</em><em>#-keepresourcexmlelements   manifest/application/meta-data@value=GlideModule</em><em></em><em>#okgo混淆</em><em>#okhttp</em><strong>-dontwarn   </strong>okhttp3.**<strong>-keep </strong>class   okhttp3.**{<strong>*;</strong>} <em>#okio</em><strong>-dontwarn   </strong>okio.**<strong>-keep </strong>class   okio.**{<strong>*;</strong>} <em>#腾讯bugly</em><strong>-dontwarn   </strong>com.tencent.bugly.**<strong>-keep </strong>public   class   com.tencent.bugly.**{<strong>*;</strong>} <em>#butterknife</em><strong>-keep   </strong>class butterknife.** {<strong> *;   </strong>}<strong>-dontwarn   </strong>butterknife.internal.**<strong>-keep   </strong>class **$$ViewBinder {<strong> *;   </strong>}<strong>-keepclasseswithmembernames </strong>class   * {<strong> @butterknife.*   <fields>;</fields></strong>}<strong>-keepclasseswithmembernames   </strong>class * {<strong> @butterknife.*   <methods>;</methods></strong>}<em>## GSON 2.2.4   specific rules ##</em><em># Gson uses generic type information   stored in a class file when working with fields.   Proguard</em><em># removes such information by default, so   configure it to keep all of it.</em><strong>-keepattributes   </strong>Signature<em># For using GSON @Expose   annotation</em><strong>-keepattributes   </strong>*Annotation*<strong>-keepattributes   </strong>EnclosingMethod<em># Gson specific classes</em><strong>-dontwarn   </strong>com.google.gson.** <em>#EventBus2.0</em><strong>-keep   </strong>class de.greenrobot.event.**   {<strong>*;</strong>}<strong>-keepclassmembers   </strong>class ** {<strong> public void   onEvent*(**);</strong><strong> void   onEvent*(**);</strong>} <em>## New rules for EventBus 3.0.x   ##</em><em>#   https://greenrobot.org/eventbus/documentation/proguard/</em><strong>-keepattributes   </strong>*Annotation*<strong>-keepclassmembers   </strong>class ** {<strong> @org.greenrobot.eventbus.Subscribe   <methods>;</methods></strong>}<strong>-keep   </strong>enum org.greenrobot.eventbus.ThreadMode {<strong> *;   </strong>}<em># Only required if you use   AsyncExecutor</em><strong>-keepclassmembers </strong>class   * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {<strong> <init>(java.lang.Throwable);</init></strong>} <em>#   fastjson proguard rules</em><em>#   https://github.com/alibaba/fastjson</em><strong>-dontwarn   </strong>com.alibaba.fastjson.**<strong>-keepattributes   </strong>Signature<strong>-keepattributes   </strong>*Annotation* <em>#support-v7-appcompat</em><strong>-keep   </strong>public class android.support.v7.widget.** {<strong> *;   </strong>}<strong>-keep </strong>public class   android.support.v7.internal.widget.** {<strong> *;   </strong>}<strong>-keep </strong>public class   android.support.v7.internal.view.menu.** {<strong> *;   </strong>} <strong>-keep </strong>public class *   extends android.support.v4.view.ActionProvider {<strong> public   <init>(android.content.Context);</init></strong>} <em>#support-design</em><strong>-dontwarn   </strong>android.support.design.**<strong>-keep   </strong>class android.support.design.** {<strong> *;   </strong>}<strong>-keep </strong>interface   android.support.design.** {<strong> *; </strong>}<strong>-keep   </strong>public class android.support.design.R$* {<strong> *;   </strong>} <em># 枚举也不要混淆Also keep - Enumerations. Keep the special static methods that   are required in</em><em># enumeration   classes.</em><strong>-keepclassmembers </strong>enum    * {<strong> public static **[] values();</strong><strong>   public static **   valueOf(java.lang.String);</strong>}   <em>#native方法不做混淆 Keep names - Native method   names. Keep all native class/method   names.</em><strong>-keepclasseswithmembers</strong>,allowshrinking   class * {<strong> native   <methods>;</methods></strong>}<em># 保持 Parcelable 不被混淆</em><strong>-keep   </strong>class * implements android.os.Parcelable {<strong>   public static final android.os.Parcelable$Creator   *;</strong>} <em>#实体类不参与混淆</em><strong>-keep </strong>class   com.hejun.solidtext.model.** {<strong> *;   </strong>} <em>#不混淆R类</em><strong>-keep   </strong>public class com.jph.android.R$*{<strong> public static   final int *;</strong>}
这里面我也还有一些不是很明白,比如android的很多系统依赖,比如通过gradle配置的一些v4,v7包里面的依赖是不是也要配置不要被混淆呢?但是,我的应用小,做了上面的事情就够了。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注移动开发之Android频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程