Android代码混淆的写法总结
Apk文件被反编译出来能被获取到里面的代码。对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。
1.使用方式,在gradle文件中设置minifyEnabled为true即可开启混淆
buildTypes{
release{
minifyEnabledture//是否开启代码混淆
proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
混淆内容在proguard-android.txt文件中写。
2.混淆设置参数
-optimizationpasses4代码混淆的压缩比例,值介于0-7
-dontusemixedcaseclassnames混淆后类型都为小写
-dontskipnonpubliclibraryclasses不去忽略非公共的库类
-dontoptimize不优化输入的类文件
-dontpreverify不做预校验的操作
-ignorewarnings忽略警告
-verbose混淆时是否记录日志
-keepattributesAnnotation保护注解
-printmappingproguardMapping.txt生成原类名和混淆后的类名的映射文件
-optimizations!code/simplification/cast,!field/,!class/merging/指定混淆是采用的算法
3.保持不被混淆的设置
保持实体类不混淆
-keepclass你的实体类所在的包.**{*;}
保持四大组件,Application,Fragment不混淆
-keeppublicclass*extendsandroid.app.Application -keeppublicclass*extendsandroid.app.Activity -keeppublicclass*extendsandroid.app.Fragment -keeppublicclass*extendsandroid.support.v4.app.Fragment -keeppublicclass*extendsandroid.app.Fragment -keeppublicclass*extendsandroid.app.Service -keeppublicclass*extendsandroid.content.BroadcastReceiver -keeppublicclass*extendsandroid.content.ContentProvider -keeppublicclass*extendsandroid.preference.Preference
保持native方法不被混淆
-keepclasseswithmembernamesclass*{
native;
}
保持枚举enum类不被混淆
-keepclassmembersenum*{
publicstatic**[]values();
publicstatic**valueOf(java.lang.String);
}
保持Parcelable不被混淆
-keepclass*implementsandroid.os.Parcelable{
publicstaticfinalandroid.os.Parcelable$Creator*;
}
保持第三方包不混淆,比如这里用到微信、支付宝支付第三方
#支付宝混淆
-keepclasscom.alipay.android.app.IAlixPay{*;}
-keepclasscom.alipay.android.app.IAlixPay$Stub{*;}
-keepclasscom.alipay.android.app.IRemoteServiceCallback{*;}
-keepclasscom.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keepclasscom.alipay.sdk.app.PayTask{public*;}
-keepclasscom.alipay.sdk.app.AuthTask{public*;}
#微信支付混淆
-keepclasscom.tencent.mm.opensdk.**{*;}
-keepclasscom.tencent.wxop.**{*;}
-keepclasscom.tencent.mm.sdk.**{*;}
4.完整混淆示例:
#指定代码的压缩级别
-optimizationpasses5
#包名不混合大小写
-dontusemixedcaseclassnames
#不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
#优化不优化输入的类文件
-dontoptimize
#预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#忽略警告
-ignorewarning
#保护注解
-keepattributes*Annotation*
-keeppublicclass*extendsandroid.app.Application
-keeppublicclass*extendsandroid.app.Activity
-keeppublicclass*extendsandroid.app.Fragment
-keeppublicclass*extendsandroid.support.v4.app.Fragment
-keeppublicclass*extendsandroid.app.Fragment
-keeppublicclass*extendsandroid.app.Service
-keeppublicclass*extendsandroid.content.BroadcastReceiver
-keeppublicclass*extendsandroid.content.ContentProvider
-keeppublicclass*extendsandroid.preference.Preference
-keepclasseswithmembernamesclass*{
native;
}
-keepclassmembersclass*extendsandroid.app.Activity{
publicvoid*(android.view.View);
}
-keepclassmembersenum*{
publicstatic**[]values();
publicstatic**valueOf(java.lang.String);
}
-keepclass*implementsandroid.os.Parcelable{
publicstaticfinalandroid.os.Parcelable$Creator*;
}
-keepclassmembersclass**.R$*{
*;
}
-keepclass*extendsandroid.view.View{*;}
-keepclass*extendsandroid.app.Dialog{*;}
-keepclass*implementsjava.io.Serializable{*;}
#butterknife
-keepclassbutterknife.**{*;}
-dontwarnbutterknife.internal.**
-keepclass**$$ViewBinder{*;}
#volley
-dontwarncom.android.volley.**
-keepclasscom.android.volley.**{*;}
#fastjson
-dontwarncom.alibaba.fastjson.**
-keepclasscom.alibaba.fastjson.**{*;}
#happy-dns
-dontwarncom.qiniu.android.dns.**
-keepclasscom.qiniu.android.dns.**{*;}
#okhttp
-dontwarncom.squareup.okhttp.**
-keepclasscom.squareup.okhttp.**{*;}
-keepclassokio.**{*;}
-keepclassandroid.net.**{*;}
-keepclasscom.android.internal.http.multipart.**{*;}
-keepclassorg.apache.**{*;}
-keepclasscom.qiniu.android.**{*;}
-keepclassandroid.support.annotation.**{*;}
-keepclasscom.squareup.wire.**{*;}
-keepclasscom.ant.liao.**{*;}
#腾讯
-keepclasscom.tencent.**{*;}
-keepclassu.aly.**{*;}
#ImageLoader
-keepclasscom.nostra13.universalimageloader.**{*;}
#友盟
-dontwarncom.umeng.**
-keepclasscom.umeng.**{*;}
#pulltorefresh
-keepclasscom.handmark.pulltorefresh.**{*;}
-keepclassandroid.support.v4.**{*;}
-keeppublicclass*extendsandroid.support.v4.**{
publicprotected*;}
-keepclassandroid.support.v7.**{*;}
自己试着用一个简单的项目加入混淆,打个包试试效果吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。