本文参考文档位于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中删除的代码 |
以上内容,在翻译的时候可能有些部分有出入!如果您在阅读的过程中发现,希望能指正一下,在此提前谢谢!
本文深入探讨了ProGuard的使用方法、选项及其作用,包括输入输出、混淆、压缩、优化等多个方面,提供了详细的示例和说明,帮助开发者更好地理解和应用ProGuard进行Android应用的优化。
1441

被折叠的 条评论
为什么被折叠?



