在這種情況下,只要我願意,如果沒有來源改變,Proguard會保證提供相同的映射嗎?
- 建項目
- 清理所有的二進制文件
- 重新構建它(沒有源/資源等發生了變化)。
不Proguard的擔保提供相同的mapping.txt文件?
在這種情況下,只要我願意,如果沒有來源改變,Proguard會保證提供相同的映射嗎?
不Proguard的擔保提供相同的mapping.txt文件?
ProGuard是確定性的:對於相同的輸入,它會生成相同的輸出。
但有一點細微之處:如果操作系統以不同的順序列出目錄中的輸入文件(特別是不在存檔內的類文件),那麼它們可能以不同的順序處理,並且輸出可以不一樣。
哪裏寫的ProGuard手冊,它是確定性的?我無法找到任何參考。 –
@Diego我是ProGuard的開發者;你必須相信我這個,或者你可以看看源代碼。 –
謝謝,@Eric,我忘了版本mapping.txt,也想知道這一點。 –
它可能會發生,但我不認爲proguard保證。
我發現這個在Proguard documentation,讓你重用你的mapping.txt,以避免對映射
-applymapping名
改變指定重用給定名稱映射這是打印出來在之前的ProGuard混淆運行中。映射文件中列出的類和類成員會收到與它們一起指定的名稱。沒有提及的班級和班級成員會收到新名字。映射可能涉及輸入類以及庫類。此選項可用於增量混淆處理,即處理現有代碼塊的附加組件或小塊補丁程序。如果代碼的結構發生根本變化,ProGuard可能會打印出應用映射的警告,導致衝突。您可以通過在兩次混淆運行中指定選項-useuniqueclassmembernames來降低此風險。只允許一個映射文件。只有在混淆時才適用。
如果您想要保證,那麼您必須使用映射文件作爲混淆處理的輸入。但是,您必須仔細檢查與該映射文件有關的衝突的所有警告。如果您忽略這一點,那麼在處理反射時可能會出現細微的錯誤。
我想這將產生同樣的輸出(以及因此使用相同的映射) - 除非有在發揮RNG ;-)鑑於輸入沒有變化(包括任何的RNG),則輸出應該是相同..考慮的一個md5sum來快速「點頭或搖動」這樣的斷言。但是,由於源代碼經常改變,所以這真的不是最有用的問題。 – 2012-11-28 21:12:39