摘要:本文将带你了解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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号