Proguard摘要

2017-09-03  本文已影响4人  liaowenhao

Proguard流程

Proguard可对Java字节码文件进行压缩,优化,混淆及预校验。

步骤流程图

自定义混淆规则keep

-keep 指定类和类的成员变量是入口节点,保护它们不被移除混淆。对一个可执行jar包来说,需要保护main的入口类;对于一个类库来说需要保护它的所有public元素。

如果只声明保护一个类,并没有指定受保护的成员。proguard只会保护它的类名和它的无参构造函数。其它成员依旧会被压缩、优化、混淆。
如果声明保护一个方法,proguard会把它当作程序的入口点,方法名不会变,但它里面的代码依旧会被优化、混淆。

-printmapping [filename] 指定输出新旧元素名的对照表的文件。映射表会被输出到标准输出流或者是一个指定的文件。

-applymapping filename 指定重用一个已经写好了的map文件作为新旧元素名的映射。元素名已经存在在mapping文件中的元素,按照映射表重命名;没有存在到mapping文件的元素,重新赋一个新的名字。mapping文件可能引用到输入文件中的类和类库中的类。这里只允许设置一个mapping文件。仅在obfuscate阶段有效。

Android编译输出文件:
R.java
包含应用所使用的资源ID,不管是程序员指派或者sdk定义的。
mapping.txt
提供原始与混淆过的类、方法和字段名称之间的转换。
这个文件在追踪异常的时候是有用的,在{android_sdk_home}/tools/proguard/lib目录下有一个retrace.jar文件。我们可以把混淆后的Stack Trace用这个工具处理一下,就会转变成容易阅读的类。所以,做app应用的同学每次发版本的时候都要把这个文件留下来,并标记清楚版本。这对线上版本的调试非常重要。
dump.txt
说明APK中所有类文件的内部结构。

-verbose 声明在处理过程中输出更多信息。添加这项配置之后,如果处理过程中出现异常,会输出整个StackTrace而不是一条简单的异常说明。

-dontpreverify #不做预校验。Proguard每个环节都可自定义选择是否启动。

参考

上一篇下一篇

猜你喜欢

热点阅读