本文参考文档位于Android SDK\tools\proguard目录下,如果想更深入的学习,可以查看docs或者examples目录下的内容!
本文先查看这个文档:file:///ANDROID_HOME/tools/proguard/docs/manual/refcard.html
参考文档:http://www.cnblogs.com/royi123/archive/2013/02/28/2937657.html
文档名:ProGuard Reference Card
用法:
java -jar proguard.jar options ...
示例:
java -jar proguard.jar @myconfig.pro
选项Options列表:
Options选项 | 描述 |
---|---|
Input/Output Options 输入输出选项 | |
@filename | 缩写 ‘-include filename’. |
-include filename | 读取指定的混淆配置文件. |
-basedirectory directoryname | 指定基础目录为以后相对的档案名称 |
-injars class_path | 指定要处理的应用程序jar(或war,ear和目录.) |
-outjars class_path | 指定处理完后要输出的jar(或war,ear和目录的名称) |
-libraryjars class_path | 指定要处理的应用程序jar(war,ear和目录所需要的程序库文件) |
-skipnonpubliclibraryclasses | Ignore non-public library classes.忽略非public的库类。 |
-dontskipnonpubliclibraryclasses | 不忽略非public的库类。。(默认该属性). |
-dontskipnonpubliclibraryclassmembers | 指定不去忽略包可见的库类的成员 |
-keepdirectories [directory_filter] | 保护指定目录中的输出文件jar(war,ear和目录所需要的程序库文件) |
-target version | 指定版本号来设定处理类文件的版本. version的值必须是这些值中的一个 1.0, 1.1, 1.2, 1.3, 1.4, 1.5 (or just 5), 1.6 (or just 6), or 1.7 (or just 7). |
-forceprocessing | 指定处理输入, 即使输出似乎是新的 |
Keep Options 保护选项 | |
-keep [,modifier,…] class_specification | 保护指定的类文件和类的成员 For example, 为保护一个 application, 应该指定它的 main class 和它的 main method; 为了处理一个library,应该指出所有可获取的公共元素 |
-keepclassmembers [,modifier,…] class_specification | 保护指定类的成员,如果此类也受到保护会更好 |
-keepclasseswithmembers [,modifier,…] class_specification | 保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。 |
-keepnames class_specification | 保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)! 也是-keep,allowshrinking class_specification 的缩写! |
-keepclassmembernames class_specification | 保护指定的类的成员的名称(如果他们不会压缩步骤中删除)!也是-keepclassmembers,allowshrinking class_specification 的缩写。 |
-keepclasseswithmembernames class_specification | 保护指定的类和类的成员的名称,如果在压缩步骤之后所有指定的类成员还存在 |
-printseeds [filename] | 列出类和类的成员-keep选项的清单,标准输出到给定的文件 |
Shrinking Options 压缩选项 | |
-dontshrink | 不压缩输入的类文件 |
-printusage [filename] | 输入程序中的无用代码到指定文件 |
-whyareyoukeeping class_specification | Print details on why the given classes and class members are being kept in the shrinking step. |
Optimization Options | |
-dontoptimize | 不优化输入的类文件.(默认是优化的,所有的方法都是在代码级优化) |
-optimizations optimization_filter | 指定这个优化是能或者不能.这是一个导出选项,只有优化开启才能应用这个属性! |
-optimizationpasses n | 指定要执行的优化的次数 |
-assumenosideeffects class_specification | 假设在优化时,所指定的方法并没有任何副作用或者影响. |
-allowaccessmodification | 优化时允许访问并修改有修饰符的类和类的成员 |
-mergeinterfacesaggressively | 当优化时允许任何接口的合并 |
Obfuscation Options | |
-dontobfuscate | 不混淆类文件,(如果设置,就没有混淆了) |
-printmapping [filename] | 对于已经重命名的类和类成员变量,打印出从旧名到新命令的映射集合,并将打印内容输出到所指定的文件中去 |
-applymapping filename | 重用映射增加混淆 |
-obfuscationdictionary filename | 使用给定文件中的关键字作为要混淆方法的名称。 注意这能极大改善混淆. 用法: java -jar proguard.jar ….. -obfuscationdictionary keywords.txt |
-classobfuscationdictionary filename | 用给定文件中的关键字来混淆类名 |
-packageobfuscationdictionary filename | 用给定文件中的关键字来混淆包名 |
-overloadaggressively | 混淆时应用侵入式重载。这个可选操作能使代码更小,更难理解 |
-useuniqueclassmembernames | 使混淆的类成员的名一致来增加混淆 |
-dontusemixedcaseclassnames | 混淆时不会产生形形色色的类名.默认时产生的混淆类名会包含大小写字符。注意,使用这个能使混淆后的jar变大 |
-keeppackagenames [package_filter] | 使所指定的包名不进行混淆 |
-flattenpackagehierarchy [package_name] | 重新包装所有重命名的包并放在给定的单一包中.这个可选操作能使代码更小,更难理解 |
-repackageclasses [package_name] | 重新包装所有重命名的类文件中放在给定的单一包中 |
-keepattributes [attribute_filter] | 保护给定的可选属性,例如typically Exceptions, InnerClasses, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable,LocalVariableTypeTable, Synthetic, EnclosingMethod, and Annotation. |
-keepparameternames | 保护参数名和方法类型不被混淆 |
-renamesourcefileattribute [string] | 设置源文件中给定的字符串常量 |
-adaptclassstrings [class_filter] | 看解释是让特定的字符串不被混淆,因为有些字符串可能作为关键字存在!.指定字符串所对应的类名也需要混淆 |
-adaptresourcefilenames [file_filter] | 对指定的文件或者资源文件进行重命名混淆(资源文件不是类文件,可能是图片jpg,html等文件,只能进行重命名) |
-adaptresourcefilecontents [file_filter] | 对资源集文件里的文件名进行更新:例如-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF |
Preverification Options | |
-dontpreverify | 不需要预先编译要处理的类文件. |
-microedition | 指定编译类文件的Java版本是Java Micro Edition |
General Options | |
-verbose | 在处理时打印信息. |
-dontnote [class_filter] | 不打印潜在的错误日志或者在配置中忽略的日志 |
-dontwarn [class_filter] | 不打印警告信息 |
-ignorewarnings | 打印警告信息,但是继续执行 |
-printconfiguration [filename] | 把处理的类文件内部结构写到标准输出文件或者锁给定的文件中 |
-dump [filename] | 指定打印类结构. |
混淆后的文件
文件名 | 文件描述 |
---|---|
dump.txt | 描述.apk文件中所有类文件间的内部结构 |
mapping.txt | 列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。 |
seeds.txt | 列出了未被混淆的类和成员 |
usage.txt | 列出了从.apk中删除的代码 |
以上内容,在翻译的时候可能有些部分有出入!如果您在阅读的过程中发现,希望能指正一下,在此提前谢谢!