混淆器手册

    欢迎来到手册混淆器版本7.3 (有什么新鲜事吗?)。

    收缩机混淆器是一个开源的Java类文件,优化器,模糊处理,并预先验证。因此,混淆器处理应用程序和库越来越快。

    • 萎缩的步骤检测和删除未使用的类、字段、方法和属性。
    • 优化步骤优化字节码并删除未使用的指令。
    • 名字模糊处理步骤重命名其余类、字段和方法使用短毫无意义的名字。
    • 最后一个预校验步骤添加预校验信息的类,需要Java微型版和Java 6和更高。

    R8默认Android收缩机,与混淆器兼容配置

    如果你开始使用混淆器,请遵循快速启动导游为了到达一个基本设置为您的应用程序或库尽快。

    有经验的用户可以直接咨询配置节所有功能。

    过程中如果您遇到任何问题,请一定要检查故障排除部分

    它是如何工作的

    输入罐子
    缩小
    优化
    混淆
    预先验证
    输出罐
    库jar
    (不变)
    库jar

    混淆器首先读取输入罐子(或aar,战争,耳朵,拉链,apk,或目录)。优化,随后减少混淆,并预先验证它们。你可以选择让混淆器执行多个优化。混淆器将处理结果写入一个或多个输出罐(或aar,战争,耳朵,拉链,apk,或目录)。输入可能包含资源文件,其名称和内容可以被更新以反映混淆后的类名称。

    混淆器需要库jar(或aar,战争,耳朵,拉链,apk,或目录)的输入指定jar。这些本质上是你需要的库来编译代码。混淆器使用它们来重建所必需的类的依赖关系进行适当的处理。库jar本身总是保持不变。你仍然应该把它们最终应用程序的类路径中。

    入口点

    为了确定哪些代码必须保留,哪些代码可以被丢弃或混淆,你必须指定一个或多个入口点你的代码。这些入口点通常类与主要方法,applet, midlet,活动,等等。

    • 萎缩的步骤混淆器从这些种子和递归地确定哪些类和类成员使用。所有其他类和类成员被丢弃。
    • 优化步骤混淆器进一步优化代码。其他优化,类和方法不入口点可以私人的,静态的,或最后,可以删除未使用的参数,和一些方法可能是内联。
    • 名字模糊处理步骤混淆器重命名类和类成员,不入口点。在这整个过程中,保持入口点确保他们仍然可以访问原始的名字。
    • 预校验步骤是唯一的一步,不必知道入口点。

    使用部分本手册描述了必要的选项示例部分提供了大量的例子。

    反射

    反思和反省目前的自动处理特定问题的代码。混淆器的类或类成员在代码中创建或动态调用(即按名称)必须指定为入口点。例如,forname ()在运行时构造可以引用任何类。通常无法计算这类必须被保留(与原来的名字),因为类名可能会读取一个配置文件,例如。你因此必须指定他们混淆器配置,使用相同的简单选项。

    然而,混淆器已经检测和处理下列情形:

    • forname (“SomeClass”)
    • SomeClass.class
    • SomeClass.class.getField (“someField”)
    • SomeClass.class.getDeclaredField (“someField”)
    • SomeClass.class。getMethod (“someMethod ", null)
    • SomeClass.class。getMethod (“someMethod”,新类[]{A.class,……})
    • SomeClass.class。getDeclaredMethod (“someMethod ", null)
    • SomeClass.class。getDeclaredMethod (“someMethod”,新类[]{A.class,……})
    • AtomicIntegerFieldUpdater.newUpdater (SomeClass。类,“someField”)
    • AtomicLongFieldUpdater.newUpdater (SomeClass。类,“someField”)
    • AtomicReferenceFieldUpdater.newUpdater (SomeClass。类,SomeType。类,“someField”)

    类和类成员的名字当然会不同,但是结构应该是相同的混淆器识别它们。被引用的类和类成员保存在萎缩阶段,和字符串参数正确更新模糊的阶段。

    此外,混淆器将提供一些建议如果保持一些类或类成员显得必要。例如,混淆器将注意构造像“(SomeClass) forname(变量).newInstance ()”。这可能是一个迹象表明,类或接口SomeClass和/或它的实现可能需要被保留下来。然后您可以相应地调整您的配置。

    提示

    生成一个检测建立允许混淆器发现情况下的反射运行时。定制的配置建议为您的应用程序将输出到控制台,并且可以复制/粘贴到您的配置。这样做,就启用的选项-addconfigurationdebugging

    适当的结果,你至少应该有点熟悉你的代码处理。混淆代码执行大量的反射可能需要反复试验,特别是没有必要的代码的内部信息。

    Baidu
    map