1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的
proguard-project.txt
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
}
}
2,在proguard-rules.pro中加入以下代码,基本可以涵盖所有
-optimizationpasses 5 #
指定代码的压缩级别
-dontusemixedcaseclassnames
#
是否使用大小写混合
-dontpreverify
# 混淆时是否做预校验
-verbose #
混淆时是否记录日志
-optimizations
!code/simplification/arithmetic,!field/*,!class/merging/*
#
混淆时所采用的算法
-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
# 保持哪些类不被混淆
-keepclasseswithmembernames class
* { # 保持 native 方法不被混淆 native ;
}
-keepclasseswithmembers class * {
# 保持自定义控件类不被混淆
public (android.content.Context,
android.util.AttributeSet);
}
-keepclasseswithmembers class *
{# 保持自定义控件类不被混淆
public (android.content.Context,
android.util.AttributeSet, int);
}
-keepclassmembers class *
extends
android.app.Activity {
# 保持自定义控件类不被混淆
public void *(android.view.View);
}
-keepclassmembers enum * { # 保持枚举 enum
类不被混淆
public static **[] values(); public static **
valueOf(java.lang.String);
}
-keep class *
implements
android.os.Parcelable {
# 保持 Parcelable 不被混淆 public static final
android.os.Parcelable$Creator *; }
3,通过 Android Studio进行 混淆代码时,默认已经将 lib目录中的 jar
都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input
jar is specified twice” 错误。