安卓论坛

标题: Android Studio实现代码混淆 [打印本页]

作者: admin    时间: 2016-12-13 15:32
标题: Android Studio实现代码混淆
1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt
  1. buildTypes {
  2.   release {
  3.     signingConfig signingConfigs.release
  4.     minifyEnabled true
  5.     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  6.   }
  7. }
复制代码
2,在proguard-rules.pro中加入以下代码,基本可以涵盖所有
  1. -optimizationpasses 5          # 指定代码的压缩级别
  2. -dontusemixedcaseclassnames   # 是否使用大小写混合
  3. -dontpreverify           # 混淆时是否做预校验
  4. -verbose                # 混淆时是否记录日志

  5. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法

  6. -keep public class * extends android.app.Activity      # 保持哪些类不被混淆
  7. -keep public class * extends android.app.Application   # 保持哪些类不被混淆
  8. -keep public class * extends android.app.Service       # 保持哪些类不被混淆
  9. -keep public class * extends android.content.BroadcastReceiver  # 保持哪些类不被混淆
  10. -keep public class * extends android.content.ContentProvider    # 保持哪些类不被混淆
  11. -keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
  12. -keep public class * extends android.preference.Preference        # 保持哪些类不被混淆
  13. -keep public class com.android.vending.licensing.ILicensingService    # 保持哪些类不被混淆

  14. -keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
  15.     native <methods>;
  16. }
  17. -keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
  18.     public <init>(android.content.Context, android.util.AttributeSet);
  19. }
  20. -keepclasseswithmembers class * {# 保持自定义控件类不被混淆
  21.     public <init>(android.content.Context, android.util.AttributeSet, int);
  22. }
  23. -keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆   
  24.     public void *(android.view.View);
  25. }
  26. -keepclassmembers enum * {     # 保持枚举 enum 类不被混淆   
  27.     public static **[] values();   
  28.     public static ** valueOf(java.lang.String);
  29. }
  30. -keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆  
  31.     public static final android.os.Parcelable$Creator *;
  32. }
复制代码
3,通过 Android Studio进行 混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ Java.io.IOException: The same input jar is specified twice” 错误。




欢迎光临 安卓论坛 (http://android.hh85.com/) Powered by Discuz! X3.2