2011-11-23 120 views
5

由於Android上的Scala問題,我最近需要在Android上引入ProGuard。我需要ProGuard的縮小功能,它可以刪除假定未使用的類。我非常擔心刪除類對可測試性的影響。現在,我編寫了在主機上運行的單元測試和在Android平臺上運行完全集成的應用程序的驗收測試。有了ProGuard,對測試策略有什麼影響?

通常,我會對相對完整的單元測試覆蓋率和點差驗收測試覆蓋感到滿意。但是,鑑於在我的代碼中,我大量使用了Guice依賴注入,到目前爲止,我的經驗是ProGuard以難以預測的方式去除代碼。因此,這很可能會導致我引入錯誤。

這使我相信我需要編寫驗收/平臺測試,以實現全面覆蓋,因爲在任何時候,都可能存在缺失的類。

別人是否有此經歷?如果是這樣,你的測試策略是什麼?或者憑藉經驗,您是否更加確信ProGuard正在移除的課程確實不需要?

回答

2

的ProGuard不會打破你的應用程序,直到它試圖使用反射或Class#的forName上去除類和/或混淆的成員。根據我的經驗(在Android上也有模糊的Scala),使用簡單煙霧測試發現ProGuard對Android應用程序造成的問題非常容易。你知道你的項目包含哪些庫。如果其中一些使用反射或Class#forName - 對它們執行煙霧測試。然後從ProGuard配置中排除必要的類/成員。

還請記住,您可以使用ActivityInstrumentationTestCase2和仿真器自動化對混淆項目的測試。如果您打算在您的項目中使用ProGuard,請始終對混淆的APK執行插裝測試。

總之 - 不要害怕。 ProGuard相關的問題相對容易發現。

+0

這通常是修整的,但在使用糟糕的庫時要小心怪異的不一致性,比如Facebook android SDK和類似的東西。它通常會破壞事物。 –

2

我們一直在進行單元測試和「全面」測試ProGuard-ed應用程序很長一段時間,而且我們沒有「真正」的問題。我們遇到的唯一問題是當我們在我們的測試中使用某些庫方法時,主應用程序中沒有使用這些方法;在這些情況下,ProGuard會從庫中刪除代碼,我們必須手動將具體方法添加到proguard.cfg

哦,我們還可以使用吉斯:)

+0

從我看到的,許多Roboguice客戶不明確使用Guice。你主要是使用Roboguice的Android資源注入,還是你正在與一個非平凡的Guice模塊進行廣泛的綁定? –

+1

我們對非roboguice的東西進行了相當多的注入。我不確定這是否會被視爲「廣泛綁定」和「非平凡」。我的整體印象是,你真的不應該擔心,ProGuard它的工作非常好。 – dmon