2011-04-11 66 views
14

從我所看到並閱讀的內容來看,如果有人真的想對軟件進行反向工程或反編譯,ProGuard不會阻止它們。但它至少是一種適度的威懾力量?我不確定是否值得稍後翻譯我的堆棧跟蹤的麻煩。正在使用ProGuard值得嗎?

回答

16

我會推薦ProGuard。即使沒有模糊處理(可以顯着縮短常量池中使用的名稱),它也可以刪除已使用的庫的「死代碼」(未使用的方法)等(它也可用於將所有內容合併在一起)。

它需要一點點的「糾正」,尤其是「如果有動態加載的類 - 但非常推薦。然而,節省空間的實際好處「取決於」可以消除什麼,並且通常會與更多的外部圖書館聯繫。

現在,對於混淆 - 它和任何混淆器一樣多:使用「有意義的名稱」將「反編譯」代碼變成不可能。然而,如果混淆不會保存您的超級祕密算法或隱藏您的私鑰,但是:如果JVM(或轉換後的Dalvik)必須理解它,那麼反編譯器和任何真正想要的人都希望獲取訪問可以。你的代碼甚至可以通過字節碼形式提取,並簡單地通過。反思(想象一個可怕的API,零文檔):任何人真的想要訪問可以。但也許混淆將使這項任務不可行的成本/支出:「這取決於」。

不想翻譯堆棧跟蹤?簡單:不使用它進行調試(而不是從用戶獲取有用的痕跡),或不能夠混淆(其它福利仍然適用);-)

編碼愉快。

2

職業警衛至少可以讓你的應用程序變得儘可能小的文件大小!

這是一個真正的優點。

它在eclipse開發和編譯時會自動使用,假如你有proguard.config=proguard.cfg到項目的default.properties文件。

這也是一個真正的優點。

+5

實際上,除非您將'proguard.config = proguard.cfg'添加到項目的default.properties文件中,否則ProGuard不會被Eclipse調用。 (您可以忽略文件中有關正在擦除的更改的警告;它不會發生。)請參閱[本主題](http://stackoverflow.com/questions/4732656/enabling-proguard-in-eclipse-for- android)獲取更多信息。 – 2011-04-11 22:15:21

+0

哦,在我上一個項目中沒有意識到這一點,因爲我在浪費了幾個小時嘗試讓proguard啓動並運行之後,從IntelliJ移回eclipse。 – 2011-04-12 06:34:24