2012-02-02 88 views
2

当混淆了.class文件注释时,它被删除。有没有方法来混淆这些文件(包含注释的文件)而不删除它们。如果可能的话,是否有方法来混淆非编译的.java文件以保留注释?包含注释的混淆类


java编译器如何处理注释以及它们保存在哪里?为什么在混淆之后所有的注释都被删除了。难道我不能在混淆课程之后,将注释带回原处并继续工作?

+1

您使用的是什么工具?你想做什么?为什么你需要混淆'.java'文件,而不是'.class'? – Marcelo 2012-02-02 10:03:09

+0

我正在使用proguard作为例子,当我使用它进行混淆时,所有注释都被删除。所以我正在考虑改变它的内容,以便它不会从文件中删除注释。 – GingerHead 2012-02-02 10:07:31

+0

不同的混淆器会对生成的字节码做不同的事情。由于带注释的类具有运行时保留,因此大部分信息都存储在字节码中。混淆器是否为这些信息做了额外的工作,我是_guessing_,是混淆器合约的一部分。 – jdv 2015-10-23 13:37:02

回答

2

我问和研究了注释和困惑,我已经找到了以下内容:

  1. 注解保存在类的字节码 的元部分,它是很难操纵它们。模糊处理程序不处理这些类
  2. 我已经尝试了很多混淆器的 - 商业和开源 的,但他们都没有可以混淆注释类有 所有注释
  3. 的唯一方法各自的领域和方法留下我可以想到的是使用xml配置 文件而不是注释
0

我们通常使用proguard对已经编译好的类进行了模糊处理,我确信它不能混淆非编译的.java文件,因为它正在处理字节码本身。

要保留注释,您可以告诉proguard保留注释等特定属性。您可以在他们的example chapter中找到更多信息。我建议使用proguardGui为混淆处理构建自己的配置文件。

+0

是的我完全了解这一点,但问题是我的项目广泛使用了spring annoations。如果我想保留所有带注释的类,方法,属性,就没有任何可以混淆的地方,所以我需要在这些注释上找到一种方法。 – GingerHead 2012-02-02 10:36:08

+1

你的第一个陈述中并不清楚。据我所知(我只有边际proguard/obfuscation经验),你可以保留这些注释,仍然混淆这些类。之后的问题是,他仍然无法找到这些类,因为(这只是一个猜测),您已经将它们映射到xml配置中,而且他不能通过内省来找到它们。解决此问题的一个解决方案可能是编程式地映射您的bean,因此您不必通过字符串文字来映射这些类,但这只是一个猜测,没有关于该主题的任何经验。 – crusam 2012-02-02 12:49:53