美文网首页
Android常用的混淆配置

Android常用的混淆配置

作者: 刺客的幻影 | 来源:发表于2019-01-02 16:12 被阅读0次

先看一下语法

配置

-ignorewarnings # 忽略警告,避免打包时某些警告出现
-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合
-dontskipnonpubliclibraryclasses # 是否混淆第三方jar
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/,!class/merging/ # 混淆时所采用的算法
-include {filename} 从给定的文件中读取配置参数
-basedirectory {directoryname} 指定基础目录为以后相对的档案名称
-injars {class_path} 指定要处理的应用程序jar,war,ear和目录
-outjars {class_path} 指定处理完后要输出的jar,war,ear和目录的名称
-libraryjars {classpath} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
-dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclassmembers 指定不去忽略包可见的库类的成员。

保留选项

-dontwarn {Modifier} 对指定的类忽略警告
-keep {Modifier} {class_specification} 保护指定的类文件和类的成员
-keepclassmembers {modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-keepnames {class_specification} 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
-keepclassmembernames {class_specification} 保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
-keepclasseswithmembernames {class_specification} 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-printseeds {filename} 列出类和类的成员-keep选项的清单,标准输出到给定的文件
压缩
-dontshrink 不压缩输入的类文件
-printusage {filename}
-whyareyoukeeping {class_specification}

优化

-dontoptimize 不优化输入的类文件
-assumenosideeffects {class_specification} 优化时假设指定的方法,没有任何副作用
-allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员

混淆

-dontobfuscate 不混淆输入的类文件
-printmapping {filename}
-applymapping {filename} 重用映射增加混淆
-obfuscationdictionary {filename} 使用给定文件中的关键字作为要混淆方法的名称
-overloadaggressively 混淆时应用侵入式重载
-useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆
-flattenpackagehierarchy {package_name} 重新包装所有重命名的包并放在给定的单一包中
-repackageclass {package_name} 重新包装所有重命名的类文件中放在给定的单一包中
-dontusemixedcaseclassnames 混淆时不会产生形形色色的类名
-keepattributes {attribute_name,...} 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.
-renamesourcefileattribute {string} 设置源文件中给定的字符串常量

项目中的应用

-optimizationpasses 5
 -dontusemixedcaseclassnames
 -dontskipnonpubliclibraryclasses
 -dontpreverify
 -verbose
 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
 -dontwarn javax.annotation.Nullable

 -keep public class * extends android.app.Activity
 -keep public class * extends android.app.Application
 -keep public class * extends android.app.Service
 -keep 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 * extends android.view.View
 -keep public class * extends android.os.IInterface
 -keep class android.media.* { *; }
 -keep public class com.android.internal.telephony.* { *; }
 -keep public class android.os.storage.* { *; }
 -keep public class android.content.pm.* { *; }
 -keep public class * extends android.support.v4.app.Fragment
 -keep public class * extends android.app.Fragment
 -keep class com.tencent.stat.*{*;}
 -keep class com.tencent.mid.*{*;}
 -keep public class com.alibaba.android.arouter.routes.**{*;}
 -keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}

 -keepclasseswithmembernames class * {
     native <methods>;
 }

 -keep class *.R

 -keepclasseswithmembers class **.R$* {
     public static <fields>;
 }

 -keepclasseswithmembers class * {
     public <init>(android.content.Context, android.util.AttributeSet);
 }

 -keepclasseswithmembers class * {
     public <init>(android.content.Context, android.util.AttributeSet, int);
 }
 -keepclassmembers enum * {
     public static **[] values();
     public static ** valueOf(java.lang.String);
 }

 -keep class * implements android.os.Parcelable {
   public static final android.os.Parcelable$Creator *;
 }

 -keepclassmembers class * {
    public <init>(org.json.JSONObject);
 }

-dontwarn !com.xxx.xxx.**
-keep class !com.xxx.xxx.** { *; }
-ignorewarnings

-keep class com.xxx.xxx.bean.** { ; }
-keep class com.xxx.xxx.net.
* { ; }
-keep class com.xxx.xxx.manager.
* { ; }
-keep class com.xxx.xxx.local.
* { *; }

com.xxx.xxx为自己项目的包名,后面是包结构,为可选配置
参考:https://www.jianshu.com/p/cb97e4e0dce2

相关文章

  • Android常用混淆配置

    为了应用的安全,通常我们将Android项目进行打包时,会把项目里的包名、类名、变量名及架包进行混淆加密,以免被轻...

  • Android常用的混淆配置

    先看一下语法 配置 -ignorewarnings # 忽略警告,避免打包时某些警告出现-optimizat...

  • Android 混淆相关

    Android 混淆原则 混淆 ProGuard常用语法 混淆基本指令

  • Android代码混淆

    待整理。。。 参考: Android混淆从入门到精通 Android代码混淆之混淆规则 代码混淆规则配置文件:pr...

  • Android Studio混淆生成mapping文件

    Android studio混淆配置,在项目build.gradle中配置开启混淆。 在proguard-rule...

  • 常用混淆配置

    我们的APK发布之前都需要混淆签名,打包,发布。最近接触混淆,所以写个文章记录一下自己的学习路径,以后用的时候也好...

  • 常用混淆配置

    ProGuard简介 众所周知 java 代码是通过jvm虚拟机把.java文件编译成.class文件,然而.cl...

  • Android-SDK默认混淆配置ProGuard

    一.介绍 二.混淆配置 1.自定义混淆文件proguard-rules.pro 2.Android SDK默认混淆...

  • Android 常用混淆

    基本的不需要混淆的 实体类 Butter Knife Retrofit RxJava RxAndroid Gson...

  • Android 混淆配置

    在安卓中,使用混淆是基本操作,当然横版一般也相对固定,下面放一套自己用的混淆横版 其他就是自定义的部分了,可以参照...

网友评论

      本文标题:Android常用的混淆配置

      本文链接:https://www.haomeiwen.com/subject/ivwzlqtx.html