防止APP被反编译,混淆设置

    xiaoxiao2021-03-25  101

    1.首先需要在app下的build.gradle下配置,true表示编译时会混淆代码 [html]  view plain  copy <span style="font-size:18px;">buildTypes {           release {                      minifyEnabled true               proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'           }       }</span>   2.在proguard-rules.pro中配置,一下是基本的配置 [html]  view plain  copy <span style="white-space:pre">        </span><pre name="code" class="html"><span style="white-space:pre">       </span>-dontshrink               #指定代码的压缩级别               -optimizationpasses 5                  #包明不混合大小写               -dontusemixedcaseclassnames                  #不去忽略非公共的库类               -dontskipnonpubliclibraryclasses                   #优化  不优化输入的类文件               -dontoptimize                   #不做预校验               -dontpreverify                   #混淆时是否记录日志               -verbose                   # 混淆时所采用的算法               -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*                  #保护注解               -keepattributes *Annotation*                  # 保持哪些类不被混淆               -keep public class * extends android.app.Fragment               -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               #如果有引用v4包可以添加下面这行               -keep public class * extends android.support.v4.app.Fragment                  #忽略警告               -ignorewarning                  ##记录生成的日志数据,gradle build时在本项目根目录输出##                  #apk 包内所有 class 的内部结构               -dump class_files.txt               #未混淆的类和成员               -printseeds seeds.txt               #列出从 apk 中删除的代码               -printusage unused.txt               #混淆前后的映射               -printmapping mapping.txt                  ########记录生成的日志数据,gradle build时 在本项目根目录输出-end######                     #####混淆保护自己项目的部分代码以及引用的第三方jar包library#######                  #-libraryjars libs/umeng-analytics-v5.2.4.jar                  #三星应用市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar               #-libraryjars libs/sdk-v1.0.0.jar               #-libraryjars libs/look-v1.0.1.jar                  #如果不想混淆 keep 掉               -keep class com.lippi.recorder.iirfilterdesigner.** {*; }               #项目特殊处理代码                  #忽略警告               -dontwarn com.lippi.recorder.utils**               #保留一个完整的包               -keep class com.lippi.recorder.utils.** {                   *;                }                  -keep class  com.lippi.recorder.utils.AudioRecorder{*;}                     #如果引用了v4或者v7包               -dontwarn android.support.**                  ####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####                  -keep public class * extends android.view.View {                   public <init>(android.content.Context);                   public <init>(android.content.Context, android.util.AttributeSet);                   public <init>(android.content.Context, android.util.AttributeSet, int);                   public void set*(...);               }                  #保持 native 方法不被混淆   #           -keepclasseswithmembernames class * {   #               native <methods>;   #           }                  # Keep names - Native method names. Keep all native class/method names.               -keepclasseswithmembers,allowshrinking class * {                   native <methods>;               }                  #保持自定义控件类不被混淆               -keepclasseswithmembers class * {                   public <init>(android.content.Context, android.util.AttributeSet);               }                  #保持自定义控件类不被混淆               -keepclassmembers class * extends android.app.Activity {                  public void *(android.view.View);               }                  #保持 Parcelable 不被混淆               -keep class * implements android.os.Parcelable {                 public static final android.os.Parcelable$Creator *;               }                  #保持 Serializable 不被混淆               -keepnames class * implements java.io.Serializable                  #保持 Serializable 不被混淆并且enum 类也不被混淆               -keepclassmembers class * implements java.io.Serializable {                   static final long serialVersionUID;                   private static final java.io.ObjectStreamField[] serialPersistentFields;                   !static !transient <fields>;                   !private <fields>;                   !private <methods>;                   private void writeObject(java.io.ObjectOutputStream);                   private void readObject(java.io.ObjectInputStream);                   java.lang.Object writeReplace();                   java.lang.Object readResolve();               }                  #保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可               #-keepclassmembers enum * {               #  public static **[] values();               #  public static ** valueOf(java.lang.String);               #}                  -keepclassmembers class * {                   public void *ButtonClicked(android.view.View);               }                  #不混淆资源类               -keepclassmembers class **.R$* {                   public static <fields>;               }   [html]  view plain  copy 如果有H5交互页面配置如下   [html]  view plain  copy <span style="white-space:pre">    </span>    #不混淆H5交互               -keepattributes *JavascriptInterface*      <span style="white-space:pre">    </span>    #ClassName是类名,H5_Object是与javascript相交互的object,建议以内部类形式书写               -keepclassmembers   class **.ClassName$H5_Object{                   *;               }   [html]  view plain  copy 如果使用有Gson,则添加以下配置   [html]  view plain  copy <span style="white-space:pre">    </span>   -keepattributes Signature                             -keepattributes *Annotation*<pre name="code" class="html"><span style="white-space:pre">  </span>    -keep class sun.misc.Unsafe { *; }    [html]  view plain  copy <span style="white-space:pre">    </span>     #下面需要填写自己bean对象对应的包名,所以建议将使用Gson解析的都放在同一包下<pre name="code" class="html"><span style="white-space:pre">    </span>    -keep class com.dingyan.students.javabean.** { *; }   [html]  view plain  copy 如果使用了其它的第三方包,则需要参照文档进行配置,否则会有莫名其妙的错误。  
    转载请注明原文地址: https://ju.6miu.com/read-10404.html

    最新回复(0)