当前位置:   article > 正文

android代码混淆详解_proguard-rules.pro

proguard-rules.pro

1、前言

在对apk进行打包时,如果不对apk进行混淆和加固,生成的apk可以轻松的进行反编译,所以对apk代码进行混淆还是很有必要的。

2、实现

开启混淆

  • 通常我们需要找到项目路径下app目录下的build.gradle文件

  • 找到minifyEnabled这个配置,然后设置为true即可.

  1. release{
  2. minifyEnabled true//是否启动混淆 ture:打开 false:关闭
  3. shrinkResources true //打开资源压缩。
  4. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  5. }

proguard-rules.pro文件的作用

  • 只要在工程应用目录的gradle文件中设置minifyEnabled:true即可。然后我们就可以到proguard-rules.pro文件中加入我们的混淆规则了

proguard是什么

  • Proguard是一个集文件压缩,优化,混淆和校验等功能的工具
  • 它检测并删除无用的类,变量,方法和属性
  • 它优化字节码并删除无用的指令.
  • 它通过将类名,变量名和方法名重命名为无意义的名称实现混淆效果.
  • 最后它还校验处理后的代码

3、混淆的常见配置

  • Proguard关键字
Proguard关键字描述
dontwarndontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.
keep保留类和类中的成员,防止被混淆或移除
keepnames保留类和类中的成员,防止被混淆,成员没有被引用会被移除
keepclassmembers只保留类中的成员,防止被混淆或移除
keepclassmembernames只保留类中的成员,防止被混淆,成员没有引用会被移除
keepclasseswithmembers保留类和类中的成员,防止被混淆或移除,保留指明的成员
keepclasseswithmembernames保留类和类中的成员,防止被混淆,保留指明的成员,成员没有引用会被移除

 在打包时如果出现报错信息,记得一定要翻上面的warning提示,例如如下则缺少

  1. -dontwarn butterknife.**
  2. -keep class butterknife.** {*;}
  1. Warning: butterknife.internal.ButterKnifeProcessor: can't find superclass or interface javax.annotation.processing.AbstractProcessor
  2. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.AbstractProcessor
  3. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.AbstractProcessor
  4. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
  5. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
  6. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.ProcessingEnvironment
  7. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.TypeElement
  8. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.Element
  9. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.Filer
  10. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.tools.JavaFileObject
  11. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.annotation.processing.RoundEnvironment
  12. Warning: butterknife.internal.ButterKnifeProcessor: can't find referenced class javax.lang.model.element.Element

4、最终实例文件

  1. #default
  2. #指定压缩级别
  3. -optimizationpasses 5
  4. -dontusemixedcaseclassnames
  5. #不跳过非公共的库的类成员
  6. -dontskipnonpubliclibraryclassmembers
  7. #混淆时采用的算法
  8. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  9. #把混淆类中的方法名也混淆了
  10. -useuniqueclassmembernames
  11. #优化时允许访问并修改有修饰符的类和类的成员
  12. -allowaccessmodification
  13. #将文件来源重命名为“SourceFile”字符串
  14. -renamesourcefileattribute SourceFile
  15. #保留行号
  16. -keepattributes SourceFile,LineNumberTable
  17. # 是否混淆第三方jar
  18. -dontwarn com.amap.api.**
  19. -dontwarn org.apache.http.**
  20. -dontskipnonpubliclibraryclasses
  21. -dontskipnonpubliclibraryclassmembers
  22. -dontpreverify
  23. -keepattributes SourceFile,LineNumberTable
  24. -verbose
  25. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  26. #不被混淆的
  27. -keep public class * extends android.app.Fragment
  28. -keep public class * extends android.app.Activity
  29. -keep public class * extends android.app.Application
  30. -keep public class * extends android.app.Service
  31. -keep public class * extends android.content.BroadcastReceiver
  32. -keep public class * extends android.preference.Preference
  33. -keep public class * extends android.content.ContentProvider
  34. -keep public class * extends android.support.v4.**
  35. -keep public class * extends android.support.annotation.**
  36. -keep public class * extends android.support.v7.**
  37. #数据模型不混淆
  38. # 保留Serializable序列化的类不被混淆
  39. -keepclassmembers class * implements java.io.Serializable {
  40. static final long serialVersionUID;
  41. private static final java.io.ObjectStreamField[] serialPersistentFields;
  42. !static !transient <fields>;
  43. !private <fields>;
  44. !private <methods>;
  45. private void writeObject(java.io.ObjectOutputStream);
  46. private void readObject(java.io.ObjectInputStream);
  47. java.lang.Object writeReplace();
  48. java.lang.Object readResolve();
  49. }
  50. # 保留Parcelable序列化类不被混淆
  51. -keep class * implements android.os.Parcelable {
  52. public static final android.os.Parcelable$Creator *;
  53. }
  54. #Fragment不需要在AndroidManifest.xml中注册,需要额外保护下
  55. -keep public class * extends android.support.v4.app.Fragment
  56. -keep public class * extends android.app.Fragment
  57. # 保持 native 方法不被混淆
  58. -keepclassmembers class * {
  59. native <methods>;
  60. }
  61. -keepclasseswithmembernames class * {
  62. native <methods>;
  63. }
  64. #注解不能混淆
  65. -keepattributes *Annotation*
  66. -keep class * extends java.lang.annotation.Annotation {*;}
  67. # 泛型与反射
  68. -keepattributes Signature
  69. -keepattributes EnclosingMethod
  70. -dontwarn okio.**
  71. -dontwarn rx.**
  72. -dontwarn android.support.v4.**
  73. -dontwarn com.tencent.**
  74. #-dontwarn com.tencent.bugly.**
  75. -keep class org.xmlpull.v1.** { *;}
  76. -dontwarn org.xmlpull.v1.**
  77. #-libraryjars libs/ksoap2-android-assembly-3.6.2-jar-with-dependencies.jar
  78. -dontwarn org.kobjects.**
  79. -keep class org.kobjects.** { *;}
  80. -dontwarn org.ksoap2.**
  81. -keep class org.ksoap2.** { *;}
  82. -dontwarn org.kxml2.**
  83. -keep class org.kxml2.** { *;}
  84. #lambda
  85. -dontwarn java.lang.invoke.*
  86. -dontwarn **$$Lambda$*
  87. # 不混淆内部类
  88. -keepattributes InnerClasses
  89. -keep public class **.R$*{
  90. public static final int *;
  91. }
  92. -dontwarn rx.**
  93. -keep class rx.**{*;}
  94. -keepattributes Exceptions
  95. ###########友盟PUSH##############
  96. -dontwarn com.taobao.**
  97. -dontwarn anet.channel.**
  98. -dontwarn anetwork.channel.**
  99. -dontwarn org.android.**
  100. -dontwarn org.apache.thrift.**
  101. -dontwarn com.xiaomi.**
  102. -dontwarn com.huawei.**
  103. -keepattributes *Annotation*
  104. -keep class org.android.** {*;}
  105. -keep class anet.channel.** {*;}
  106. -keep class com.umeng.** {*;}
  107. -keep class com.xiaomi.** {*;}
  108. -keep class com.huawei.** {*;}
  109. -keep class org.apache.thrift.** {*;}
  110. -keep class com.alibaba.sdk.android.**{*;}
  111. -keep class com.ut.**{*;}
  112. -keep class com.ta.**{*;}
  113. -keep public class **.R$*{
  114. public static final int *;
  115. }
  116. #(可选)避免Log打印输出
  117. -assumenosideeffects class android.util.Log {
  118. public static *** v(...);
  119. public static *** d(...);
  120. public static *** i(...);
  121. public static *** w(...);
  122. }
  123. ###########友盟统计##############
  124. -keepclassmembers class * {
  125. public <init> (org.json.JSONObject);
  126. }
  127. -keepclassmembers enum * {
  128. public static **[] values();
  129. public static ** valueOf(java.lang.String);
  130. }
  131. -dontwarn com.ut.mini.**
  132. -dontwarn okio.**
  133. -dontwarn com.xiaomi.**
  134. -dontwarn com.squareup.wire.**
  135. -dontwarn android.support.v4.**
  136. -keepattributes *Annotation*
  137. -keep class android.support.v4.** { *; }
  138. -keep interface android.support.v4.app.** { *; }
  139. -keep class okio.** {*;}
  140. -keep class com.squareup.wire.** {*;}
  141. -keep class com.umeng.message.protobuffer.* {
  142. public <fields>;
  143. public <methods>;
  144. }
  145. -keep class com.umeng.message.* {
  146. public <fields>;
  147. public <methods>;
  148. }
  149. -keep class org.android.agoo.impl.* {
  150. public <fields>;
  151. public <methods>;
  152. }
  153. -keep class org.android.agoo.service.* {*;}
  154. -keep class org.android.spdy.**{*;}
  155. -keep public class com.hrmp.R$*{
  156. public static final int *;
  157. }
  158. ###########xstream##############
  159. -dontwarn com.thoughtworks.xstream.**
  160. -keep class com.thoughtworks.xstream.** {*;}
  161. -keep class com.thoughtworks.xstream.mappger.**{*;}
  162. -keep class com.thoughtworks.xstream.annotations.**{*;}
  163. -keep class com.thoughtworks.xstream.converters.**{*;}
  164. -keep class com.thoughtworks.xstream.core.**{*;}
  165. -keep class com.thoughtworks.xstream.io.**{*;}
  166. -keep class com.thoughtworks.xstream.persistence.**{*;}
  167. -keep class com.thoughtworks.xstream.security.**{*;}
  168. -keep class com.thoughtworks.xstream.MarshallingStrategy
  169. -keep class com.thoughtworks.xstream.InitializationException
  170. -keep class com.thoughtworks.xstream.XStream
  171. -keep class com.thoughtworks.xstream.XStreamer
  172. -keep class com.thoughtworks.xstream.XStreamException
  173. # OkHttp3
  174. -dontwarn com.squareup.okhttp3.**
  175. -keep class com.squareup.okhttp3.** { *;}
  176. # Okio
  177. -dontwarn com.squareup.**
  178. -dontwarn okio.**
  179. -keep public class org.codehaus.* { *; }
  180. -keep public class java.nio.* { *; }
  181. # RxJava RxAndroid
  182. -dontwarn sun.misc.**
  183. -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
  184. long producerIndex;
  185. long consumerIndex;
  186. }
  187. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
  188. rx.internal.util.atomic.LinkedQueueNode producerNode;
  189. }
  190. -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
  191. rx.internal.util.atomic.LinkedQueueNode consumerNode;
  192. }
  193. -dontwarn cn.org.**
  194. -dontwarn com.fasterxml.**
  195. -dontwarn retrofit2.**
  196. -dontwarn com.alibaba.fastjson.**
  197. -dontwarn butterknife.**
  198. -keep class com.android.** {*;}
  199. -keep class com.fasterxml.** {*;}
  200. -keep class retrofit2.** {*;}
  201. -keep class butterknife.** {*;}

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/285577
推荐阅读
相关标签
  

闽ICP备14008679号