7

我想从删除中跳过一个特定的类。它通常不会在我的应用程序中的任何地方引用,而只能通过反射来引用,因此它确实会被收缩器删除。它被其包中的其他“相邻”类引用,但并未直接用于我的应用程序,而仅用于反射。

我决定专门为这个特定的类处理一个映射:

org.mypckg.Helper -> gh6

...然后我当然改变了我的应用程序的反射调用:

forName("gh6")

我的映射输入似乎没有问题,但映射规则本身不足以防止类被删除。此外,我仍然无法使用 -keep 开关保留该类,因为它确实使用其原始名称 (org.mypckg.Helper) 来保留它,这是我不想要的。

出于某种原因,我无法在项目中手动将类折射(重命名)为“gh6”。

4

1 回答 1

15

ProGuard 识别结构Class.forName("org.mypckg.Helper")org.mypckg.Helper然后它在没有进一步配置的情况下保留和混淆。

除此以外:

-keep,allowobfuscation class org.mypckg.Helper
-adaptclassstrings org.mypckg.AdjacentClass*

参照。ProGuard 手册 > 使用 > Keep 选项概述

参照。ProGuard 手册 > 用法 > -adaptclassstrings

于 2012-09-26T21:22:49.527 回答