2012-06-05 72 views
1

混淆後我的jar文件的集合與菱形圖案的依賴關係:如何留住JAR依賴使用ProGuard

                    base.jar
                 /                    \
dep1.jar           dep2.jar
                  \                    /
                  dep3.jar

我想使用ProGuard混淆他們保留自己的依賴關係,因此,例如,base.jar的模糊版本和dep2.jar可以獨立執行,不需要dep1.jar和dep3.jar的混淆版本(就像它們可以,未混淆一樣)。在具有相同包名的罐子中分佈有類,並且依賴罐中的方法調用方法(在各種類中),我想在它們所依賴的罐子中對其進行模糊處理

當我試圖一次模糊所有瓶子時,ProGuard並不「理解」它們的依賴;並從base.jar中的類採取靜態方法,並將其移至dep1.jar中的混淆類。如果dep1.jar不在類路徑中,代碼位於dep2.jar的模糊版本中,「期望」base.jar中的方法在運行時失敗。

我該如何確保混淆瓶子中的依賴關係得以保留?

文檔建議使用incremental obfuscation-applymapping開關似乎需要只能拿一個參數告訴依賴方法混淆的名稱在調用到它們依賴於罐子使用,這會首先混淆。 dep1.jar的混淆可以產生一個這樣的映射文件參數,而dep2.jar的混淆可以產生另一個,但dep3.jar的混淆需要這些映射文件(加上base.jar?)在其-applymapping論據。然而,dep1.jar和dep2.jar不能混淆在一起(,或者他們可以?),因爲代碼可能會從一個映射文件重新定位到另一個映射文件。 我必須自己合併映射文件嗎?

回答

1

最簡單的(雖然子最佳)解決方案是一次處理它們,而無需優化(-dontoptimize)。

+0

謝謝!這似乎奏效了。 – lefty

1

我們已經使用ProGuard兩三年了,在我們的配置中沒有-repackageclasses標誌,我們的.jar文件出現混淆並仍然正常工作。任何人在我們的.jar文件中都可以看到我們的命名空間是com。[company],這是flag可以隱藏的東西,但我們認爲這並不是什麼大不了的事情。沒有它你應該沒問題。

(順便說一句,我不知道是否被混淆你的類名-repackageclasses生效之前,並有一個名稱衝突的地方?我們有類似的問題一次。)

+0

自你回答以來,我已經重申了我的問題,因此人們可能不瞭解您對我最初的擔憂做出了迴應,因爲(我)反駁說,'-repackageclasses'參數導致了混淆依賴性的變化。 – lefty