欢迎来到手册混淆器版本7.3 (有什么新鲜事吗?)。
收缩机混淆器是一个开源的Java类文件,优化器,模糊处理,并预先验证。因此,混淆器处理应用程序和库越来越快。
R8默认Android收缩机,与混淆器兼容配置。
如果你开始使用混淆器,请遵循快速启动导游为了到达一个基本设置为您的应用程序或库尽快。
有经验的用户可以直接咨询配置节所有功能。
过程中如果您遇到任何问题,请一定要检查故障排除部分。
混淆器首先读取输入罐子(或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
适当的结果,你至少应该有点熟悉你的代码处理。混淆代码执行大量的反射可能需要反复试验,特别是没有必要的代码的内部信息。