美文网首页
Proguard摘要

Proguard摘要

作者: liaowenhao | 来源:发表于2017-09-03 00:32 被阅读4次

    Proguard流程

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

    步骤流程图
    • shrink:检测和移除封装应用中未使用的类、字段和属性,包括 自带代码库中的未使用项。

    • optimize:可优化字节码,非入口节点类会加上private/static/final,没有用到的参数会被删除,一些方法可能会变成内联代码。移除未使用的代码指令。

    • obfuscate:使用短且没有语义的名字重命名非入口类的类名,变量名,方法名。入口类的名字保持不变。

    • preverify:预校验代码是否符合Java1.6或更高的规范。preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。

    自定义混淆规则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每个环节都可自定义选择是否启动。

    参考

    相关文章

      网友评论

          本文标题:Proguard摘要

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