搜索
热搜: 活动 交友 discuz
查看: 3792|回复: 0
打印 上一主题 下一主题

Android Studio实现代码混淆

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-12-13 15:32:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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” 错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-5 07:37 , Processed in 0.079387 second(s), 36 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表