交互比较好的网站,html 网站 模板中文,莱芜最新话题,wordpress能做外贸网站一.介绍通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等)混淆代码就能删除这些调试信息#xff0c;并用无意义字符替换所有名字#xff0c;增加反编译难度#xff01;ProGuard是一个混淆代码的开源项目#xff0c;主要作用如下#xff1a;混淆Obfuscate 用无…一.介绍通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等)混淆代码就能删除这些调试信息并用无意义字符替换所有名字增加反编译难度ProGuard是一个混淆代码的开源项目主要作用如下混淆Obfuscate 用无意义字符替换类名/字段名/属性名/方法名等压缩Shrink 移除无用类/字段/属性/方法优化Optimize 移除无用字节码指令预检preverify 预检字节码,确保可执行二.混淆配置在Android studio/build.gradle中android {...buildTypes {release {//开启混淆/压缩minifyEnabled true//proguard-android.txt是Android SDK默认混淆配置文件//proguard-rules.pro是我们自定义混淆配置文件proguardFiles getDefaultProguardFile(proguard-android.txt), proguard-rules.pro}}}1.自定义混淆文件proguard-rules.pro#基本指令-----------------------------------printmapping proguardMapping.txt #输出混淆前后代码映射关系-keepattributes Signature #保留泛型-keepattributes SourceFile, LineNumberTable #抛出异常时保留代码行号#移除log代码#确保没有开启--dontoptimize选项#默认混淆文件不要用proguard-android.txt,应该用proguard-android-optimize.txt#assume no side effects假定无效, 标识无效代码-assumenosideeffects class android.util.Log {public static int v(...);public static int d(...);public static int i(...);}2.Android SDK默认混淆文件proguard-android.txtAndroidSDK\tools\proguard\proguard-android.txt\proguard-android-optimize.txt其中proguard-android是不开启优化的配置文件proguard-android-optimize.tx是开启优化的配置文件#1.在proguard-android-optimize.txt中——————————————————————————————#开启优化-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* -optimizationpasses 5 -allowaccessmodification ......剩下部分同proguard-android.txt#2.在proguard-android.txt中———————————————————————————————————————#不开启优化, 会导致-assumenosideeffects无法去除log代码#如果要用-assumenosideeffects去除log代码,默认混淆文件应该选proguard-android-optimize.txt-dontoptimize-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-verbose-dontpreverify-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService -keepclasseswithmembernames class * {native ;}-keepclassmembers public class * extends android.view.View {void set*(***);*** get*();}-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}-keepclassmembers class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator CREATOR;}-keepclassmembers class **.R$* {public static ;}-dontwarn android.support.**-keep class android.support.annotation.Keep-keep android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {android.support.annotation.Keep ;}-keepclasseswithmembers class * {android.support.annotation.Keep ;}-keepclasseswithmembers class * {android.support.annotation.Keep (...);}