2012-09-24 203 views
4

我想跳过删除特定的类。它通常不会在我的应用程序中的任何位置引用,但只能通过反射来引用,因此它会被缩放器删除。它被包中的其他“相邻”类引用,但是不直接用于我的应用程序,而只是通过反射。Java ProGuard。类保留(不要删除),但允许被混淆

我决定专门为这个特殊类对待,映射:

org.mypckg.Helper -> gh6 

...那么ofcourse我改变了反射调用withing我的应用程序:

forName("gh6") 

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

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

+0

在我写完这个问题后,我想起了一个非常简单的解决方案。在我的应用程序中的某个地方“假使用”,但直接,而不是反思。但是,我想知道是否有方法使用ProGuard保存它? – PatlaDJ

+0

为什么仅仅为这个班保留原来的名字是个问题?它在代码中被高度使用? –

+0

不常用,但重要。 – PatlaDJ

回答

5

ProGuard识别构造Class.forName("org.mypckg.Helper");然后它保留并混淆org.mypckg.Helper而无需进一步配置。

否则:

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

CFR。 ProGuard手册>使用>Overview of Keep Options

参考文献ProGuard使用手册>使用方法>-adaptclassstrings

+0

是的,那正是我想要的。欢呼声(y) – PatlaDJ