2012-02-02 76 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