一、什么是proguard?
proguard是一个免费的JAVA类文件压缩,优化,混淆器。
它探测并删除没有使用的类,字段,方法和属性,它删除没有用的说明并使用字节码得到最大优化,它使用无意义的名字重命名类,字段和方法。
二、为啥要使用proguard?
1、优化应用:创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用;
2、防止反向:创建的程序和程序库很难使用反向工程;
3、预处理应用:充分利用JAVA6的快捷加载的优点来提前检测和返回JAVA6中存在的类文件。
三、有些什么参数可用?
1、-include {filename} 从指定的文件中读取配置参数
2、-basedirectory {directoryname} 指定基础目录为以后相对的档案文件
3、-injars {class_path} 指定要处理的应用程序jar,war,ear的目录
4、-outjars {class_path} 指定处理完后要输出的jar,war,ear目录的名称
5、-libraryjars {class_path} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
6、dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类
7、dontskipnonpubliclibraryclassmebmbers 指定不去忽略可见的库类的成员
四、有哪些保留选项?
1、-keep {Modifier} {class_specification} 保护指定的类文件和类的成员
2、-keepclassmembers {Modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护得更好
3、-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类的成员是要存在的
4、-keepnams {class_specification} 保护指定的类的成员和名称(如果他们不会在压缩的过程中被删除)
5、-keepclassmembernames {class_specification} 保护指定类的成员的名称(如果他们不会在压缩的过程中被删除)
6、-keepclasseswithmembersnams {class_specification} 保护指定的类和类成员的名称,如果所有指定的类成员出席(在压缩之后)
7、-printseeds {filename} 列出类和类成员-keep选项的清单,标准输出到给定的文件
五、压缩
1、dontshrink 不压缩输入的类文件
2、printusage {filename}
3、whyareyoukeeping {class_specification}
六、优化
1、-dontoptimize 不优化输入的类文件
2、-assumenosideeffects {class_specification} 优化时假设指定的方法,没有任何副作用
3、-allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员
七、混淆
1、-dontobfuscate 不混淆输入的类文件
2、-printmapping {filename}
3、-applymapping {filename} 重用映射增加混淆
4、-obfuscationdictionary {filename} 使用给定文件中的关键字作为要混淆方法的名称
5、-overloadaggressively 混淆时应用侵入式重载
6、-useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆
7、-flattenpackagehierarchy {package_name} 重新包装所有重命名的包并放在给定的单一包中
8、-repackageclass {package_name} 重新包装所有重命名的类文件中放在给定的单一包中
9、-dontusemixedcaseclassnames 混淆时不会产生形形色色的类名
10、-keepattributes {attribute_name,...} 保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.
11、-renamesourcefileattribute {string} 设置源文件中给定的字符串常量