android学习之代码混淆小结
来源:互联网 发布:js点击切换显示隐藏 编辑:程序博客网 时间:2024/06/06 07:46
之前一直没有对代码混淆有一个很明确的认识,今天重新对代码混淆做了一番了解,并记录一下在android studio上是如何做代码混淆的。
第一步:
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
将Module下的build.gradle文件中将minifyEnabled false改为minifyEnabled true,则默认进行代码混淆。打包的时候选择release,否则只打包不会混淆。
第二步:
- 混淆规则:
proguard默认会对第三方库进行混淆,而有的第三方库本身是做过混淆或者使用了java反射技术,例如腾讯直播的SDK就采用了反射技术。这时候就要排除对这些第三方库的混淆。
摘自《Android代码混淆技巧》总结的混淆规则,觉得很全面。
1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。
2.如果使用了自定义控件那么要保证它们不参与混淆。
3.如果使用了枚举要保证枚举不被混淆。
4.对第三方库中的类不进行混淆
语法很多,我自己也记不全,不过一般的第三方库会给出混淆代码来方便我们集成,所以记不住也不需要太过担心
在android中在android Manifest文件中的activity,service,provider, receviter,等都不能进行混淆。一些在xml中配置的自定义的view也不能进行混淆,android提供的默认配置中都有。
-optimizationpasses 5#混淆时不会产生形形色色的类名-dontusemixedcaseclassnames#指定不去忽略非公共的类库-dontskipnonpubliclibraryclasses#不进行预校验-dontpreverify-verbose#优化操作-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#-------------------------------------通用混淆配置 start ---------------------------------------# 对于继承Android的四大组件等系统类,保持原样-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 class android.support.**{*;}-keep class android.support.v4.** { *; }-keep interface android.support.v4.app.** { *; }-keep public class * extends android.support.v4.**-dontwarn android.support.v4.**-dontwarn com.android.support.**-dontwarn android.support.**# 保对所有类的native方法名不进行混淆-keepclasseswithmembernames class *{ native <methods>;}# 对所有类的初始化方法的方法名不进行混淆-keepclasseswithmembers class *{ public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class *{ public <init>(android.content.Context, android.util.AttributeSet,int);}# 保护继承至View对象中的set/get方法-keepclassmembers public class * extends android.view.View { void set*(***); *** get*();}# 对枚举类型enum的所有类的以下指定方法的方法名不进行混淆-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}# 对实现了Parcelable接口的所有类的类名不进行混淆,对其成员变量为Parcelable$Creator类型的成员变量的变量名不进行混淆-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}-keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; }-keep class **.R$* { *; }#----------------------------------------通用混淆配置 end ------------------------------------
以上只是最基本的混淆,具体项目中的第三方库具体添加!
贴出示例:
#保持gson不被混淆-keep class com.google.gson.** {*;} #-keep class com.google.**{*;} -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.stream.** { *; } -keep class com.google.gson.examples.android.model.** { *; } -keep class com.google.** { <fields>; <methods>; } # Butterknife混淆处理-keep class butterknife.** { *; }-keep class **$$ViewInjector { *; }-dontwarn butterknife.internal.**-keepclasseswithmembernames class * { @butterknife.* <fields>;}-keepclasseswithmembernames class * { @butterknife.* <methods>;}#EventBus不被混淆-keepclassmembers class ** { public void onEvent*(**);}# Only required if you use AsyncExecutor-keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent { <init>(java.lang.Throwable);}#Glide不被混淆-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;}# # -------------------------------------------# # ############### volley混淆 ############### # # --------------------------------------------keep class com.android.volley.** {*;}-keep class com.android.volley.toolbox.** {*;}-keep class com.android.volley.Response$* { *; }-keep class com.android.volley.Request$* { *; }-keep class com.android.volley.RequestQueue$* { *; }-keep class com.android.volley.toolbox.HurlStack$* { *; }-keep class com.android.volley.toolbox.ImageLoader$* { *; }# # -------------------------------------------# # ############### android-support-v4混淆 ############### # # --------------------------------------------dontwarn android.support.v4.** -keep class android.support.v4.** { *; } -keep interface android.support.v4.app.** { *; } -keep public class * extends android.support.v4.** -keep public class * extends android.app.Fragment#如果引用了v4或者v7包,可以忽略警告,因为用不到android.support -dontwarn android.support.** # # -------------------------------------------# # ############### androidannotations混淆 ############### # # --------------------------------------------dontwarn org.springframework.**# universal-image-loader 混淆-dontwarn com.nostra13.universalimageloader.**-keep class com.nostra13.universalimageloader.** { *; }###-----------MPAndroidChart图库相关的混淆配置------------ -keep class com.github.mikephil.charting.** { *; } #对WebView的处理-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, java.lang.String);}#支付宝保持不被混淆-dontwarn com.alipay.android.app.** -keep public class com.alipay.** {*;}# ========== fastjson ============-dontwarn com.alibaba.fastjson.**-keep class com.alibaba.fastjson.** {*;}# ================================####################zxing##################### -keep class com.google.zxing.** {*;} -dontwarn com.google.zxing.**
上面总结了这么多,当然还有很多其他的第三方库,无法一一列出总结,都可以参考具体文档来进行混淆。
1 0
- android学习之代码混淆小结
- android学习之代码混淆小结
- Android Studio代码混淆小结
- Android代码混淆学习
- Android之代码混淆
- Android之代码混淆
- android之代码混淆
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android代码混淆之混淆规则
- Android开发之代码混淆
- 不同应用渠道一键打包
- OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/pip-1.5-py2.7.egg/EGG-INFO
- nginx url实现二次转发
- 如果后台的 Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
- AsyncTask
- android学习之代码混淆小结
- 关于打字的认识
- 登陆注册如何实现
- java中的List集合运算
- h5学习笔记: ul和li组合
- JavaScript(二)
- 各大公司广泛使用的在线学习算法FTRL详解
- Activity中windowSoftInputMode属性
- Android ProgressBar详解以及自定义