混淆代码的作用:毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有app都应该开启混淆,首先,这里说的混淆其实是包括了代码压缩、代码混淆以及资源压缩等的优化过程。一卡ProGuard混淆流程将主项目以及依赖库中未被使用的类、类成员、方法、属性移除,这有助于规避64K方法数的平静;同事,将类、类成员、方法重命名为无意义的剪短名称,增加了逆向工程的难度。而依靠Gradle的Android插件,我们将移除未被使用的资源,可以有效减少apk安装包的大小混淆代码步骤如下:
第一步 在build.grande中中添加,其中规则写在pro guard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的proguard-project.txt
buildTypes { release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }第二步 在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 <methods>; } -keepclasseswithmembers class * { # 保持自定义控件类不被混淆 public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * {# 保持自定义控件类不被混淆 public <init>(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 *; }第三步 通过Android Studio进行混淆代码时,默认已将lib目录中的jar都已经添加到打包的脚本中,所以不需要再次手动添加,否则会出现"java.io.IOException:The same input jar is specified twice"错误
Android菜鸟练习第三十课 代码混淆
最新推荐文章于 2019-06-11 16:16:24 发布