混淆Proguard文件

来源:互联网 发布:弘历筹码分布指标源码 编辑:程序博客网 时间:2024/05/21 21:37
1,Proguard基本介绍
  1. 压缩和优化使得编译后apk包更小
  2. 混淆可以保证代码在被反编译后很难读懂,防止逆向工程

2,ProGuard生成文件

  1. mapping.txt —> 表示混淆前后代码的对照表,这个文件非常重要。
  2. 如果你的代码混淆后会产生bug的话,log提示中是混淆后的代码,希望定位到源代码的话就可以根据mapping.txt反推。
  3. 每次发布都要保留它方便该版本出现问题时调出日志进行排查,它可以根据版本号或是发布时间命名来保存或是放进代码版本控制中
  4. dump.txt —> 描述apk内所有class文件的内部结构
  5. seeds.txt —> 列出了没有被混淆的类和成员
  6. usage.txt —> 列出了源代码中被删除在apk中不存在的代码

3,常用去混淆内容
  1. 反射用到的类AndroidManifest中配置的类(ActivityService等的子类及Framework类默认不进行混淆)
  2. Jni中调用的类
  3. 用到的第三方的jar
  4. 表示保留本地的bean文件下的实体类
  5. 特别处理js与本地原生组件之间的调用过程
  6. 自定义不混淆的类

4,常用去混淆文件
  1. # Add project specific ProGuard rules here.
  2. # By default, the flags in this file are appended to flags specified
  3. # in D:\study_adt_studio\sdk/tools/proguard/proguard-android.txt
  4. # You can edit the include path and order by changing the proguardFiles
  5. # directive in build.gradle.
  6. #
  7. # For more details, see
  8. # http://developer.android.com/guide/developing/tools/proguard.html
  9. # Add any project specific keep options here:
  10. # If your project uses WebView with JS, uncomment the following
  11. # and specify the fully qualified class name to the JavaScript interface
  12. # class:
  13. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  14. # public *;
  15. #}
  16. ######################################### 以下是固定的 ############################################
  17. ######################################### 压缩 ############################################
  18. #指定代码的压缩级别
  19. -optimizationpasses 5
  20. ######################################### 优化 ############################################
  21. #不优化输入的类文件
  22. -dontoptimize
  23. ######################################### 混淆配置 ############################################
  24. #包名不混合大小写;混淆时,不会产生形形色色的类名
  25. -dontusemixedcaseclassnames
  26. #指定 不去忽略非公共的库类;是否混淆第三方jar
  27. -dontskipnonpubliclibraryclasses
  28. #混淆时,不做预校验
  29. -dontpreverify
  30. #混淆时是否记录日志
  31. -verbose
  32. # 混淆时所采用的算法
  33. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  34. #保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, InnerClass
  35. -keepattributes Signature
  36. -keepattributes *Annotation*
  37. #忽略警告,避免打包时某些警告出现
  38. #-ignorewarning
  39. ##记录生成的日志数据,gradle build时在本项目根目录输出##
  40. #apk 包内所有 class 的内部结构
  41. -dump class_files.txt
  42. #未混淆的类和成员
  43. -printseeds seeds.txt
  44. #列出从 apk 中删除的代码
  45. -printusage unused.txt
  46. #混淆前后的映射
  47. -printmapping mapping.txt
  48. ########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
  49. #忽略警告
  50. -dontwarn com.lippi.recorder.utils**
  51. #如果引用了v4或者v7包
  52. -dontwarn android.support.**
  53. ######################################### 保持哪些类不被混淆 ############################################
  54. #不混淆某个类 的子类
  55. -keep public class * extends android.app.Application
  56. -keep public class * extends android.app.Activity
  57. -keep public class * extends android.support.v4.app.Fragment
  58. -keep public class * extends android.app.Fragment
  59. -keep public class * extends android.app.Service
  60. -keep public class * extends android.content.BroadcastReceiver
  61. -keep public class * extends android.content.ContentProvider
  62. -keep public class * extends android.preference.Preference
  63. -keep public class * extends android.support.v4.**
  64. -keep public class * extends android.support.annotation.**
  65. -keep public class * extends android.support.v7.**
  66. ######################################### 保持哪些类不被混淆 ############################################
  67. #Gson
  68. -keep class sun.misc.Unsafe { *; }
  69. -keep class com.google.gson.stream.** { *; }
  70. # Application classes that will be serialized/deserialized over Gson 下面替换成自己的实体类
  71. -keep class com.hokol.medium.http.bean.** { *; }
  72. #OkHttp3
  73. -dontwarn com.squareup.okhttp3.**
  74. -keep class com.squareup.okhttp3.** { *;}
  75. -dontwarn okio.**
  76. #Glide
  77. -keep public class * implements com.bumptech.glide.module.GlideModule
  78. -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  79. **[] $VALUES;
  80. public *;
  81. }
  82. #保持 native 方法不被混淆
  83. # -keepclasseswithmembernames class * {
  84. # native <methods>;
  85. # }
  86. #保持自定义控件类不被混淆
  87. #-keepclasseswithmembers class * {
  88. # public <init>(android.content.Context, android.util.AttributeSet);
  89. #}
  90. # 保持自定义控件类不被混淆
  91. #-keepclasseswithmembers class * {
  92. # public <init>(android.content.Context, android.util.AttributeSet, int);
  93. #}
  94. #保持类成员
  95. #-keepclassmembers class * extends android.app.Activity {
  96. # public void *(android.view.View);
  97. #}
  98. #保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
  99. #-keepclassmembers enum * {
  100. # public static **[] values();
  101. # public static ** valueOf(java.lang.String);
  102. #}
  103. #保持 Parcelable 不被混淆
  104. #-keep class * implements android.os.Parcelable {
  105. # public static final android.os.Parcelable$Creator *;
  106. #}
  107. #保持 Serializable 不被混淆
  108. #-keepnames class * implements java.io.Serializable
  109. #保留一个完整的包
  110. #-keep class com.lippi.recorder.utils.** {
  111. # *;
  112. #}
  113. #如果不想混淆 keep 掉
  114. #-keep class MyClass;
  115. ######################################### 第三方库 ############################################
  116. #gson
  117. #-keepattributes *Annotation* 上面已经有了
  118. #-keep class com.google.gson.** {
  119. # *;
  120. #}
  121. #-keep class com.google.gson.examples.android.model.** { *; }
  122. #-keep class com.hokol.medium.http.** {
  123. # *;
  124. #}
  125. #-keep class com.yline.** {
  126. # *;
  127. #}
  128. #-keep class com.** {
  129. # *;
  130. #}
  131. #-keep class jp.** {
  132. # *;
  133. #}
  134. #-keep class android.support.** {
  135. # *;
  136. #}
  137. #-keep class okio.** {
  138. # *;
  139. #}
  140. #-keep class okhttp3.** {
  141. # *;
  142. #}
  143. #####混淆保护自己项目的部分代码以及引用的第三方jar包library#######
  144. #-libraryjars libs/umeng-analytics-v5.2.4.jar
  145. #三星应用市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar
  146. #-libraryjars libs/sdk-v1.0.0.jar
  147. #-libraryjars libs/look-v1.0.1.jar
  148. #-keepnames class com.hokol.config.glide.HokolGlideModule
  149. #-keep public class * implements com.bumptech.glide.module.GlideModule

5,日志反混淆(自己尝试没啥用)
路径:D:\study_adt_studio\sdk\tools\proguard\bin\proguardgui.bat

 











原创粉丝点击