2011-11-23 11 views
5

Ho bisogno di presentare di recente ProGuard su Android a causa di problemi con Scala su Android. Ho bisogno di ProGuard per la sua funzione di restringimento, che rimuove le classi che si presume non siano utilizzate. Sono molto preoccupato per l'impatto della rimozione delle classi sulla testabilità.Con ProGuard, qual è l'impatto sulla strategia di testing?

Allo stato attuale, scrivo test unitari eseguiti sui test di accoglienza e di accettazione che eseguono l'applicazione completamente integrata sulla piattaforma Android.

Normalmente, mi sentirei a mio agio con una copertura di test unitaria relativamente completa e una copertura di test di accettazione chiazzata. Tuttavia, dato che nel mio codice uso Guice dependency injection pesantemente, finora è stata la mia esperienza che ProGuard rimuove il codice in un modo che per me è difficile da prevedere. Per questo motivo è molto probabile che mi faccia introdurre dei bug.

Questo mi porta a credere che ho bisogno di scrivere test di accettazione/piattaforma che ottengano una copertura completa perché in qualsiasi momento potrebbe esserci una classe mancante.

Altri hanno questa esperienza? Se sì, quale è stata la tua strategia di test? O con l'esperienza, diventi più sicuro che le classi che ProGuard sta rimuovendo non siano realmente necessarie?

risposta

2

ProGuard non si romperà l'applicazione fino a quando non tenta di utilizzare la riflessione o Classe # forName sulle classi rimossi e/o membri offuscati.

Dalla mia esperienza (con Scala offuscata anche su Android) è davvero facile individuare i problemi causati da ProGuard alla tua applicazione Android utilizzando i semplici test del fumo. Sai quali librerie includi nel tuo progetto. Se alcuni di essi usano il reflection o Class # forName - esegui il test del fumo su di essi. Quindi escludere le classi/i membri necessari dalla configurazione di ProGuard.

Ricorda inoltre che puoi automatizzare i test del tuo progetto offuscato utilizzando ActivityInstrumentationTestCase2 ed emulatore. Se prevedi di utilizzare ProGuard sul tuo progetto, esegui sempre test di strumentazione su APK offuscato.

In conclusione, non temere. I problemi relativi a ProGuard sono la relatività facile da individuare.

+0

questo è generalmente tracciato, ma fai attenzione alla strana incoerenza quando usi le librerie crappy, come l'SDK Android di Facebook e cose del genere. Generalmente rompe le cose. –

2

Siamo stati entrambi test unitari e "completamente" testando la nostra applicazione ProGuard-ed ormai da un po 'di tempo e non abbiamo avuto problemi "reali". L'unico problema che incontriamo è quando utilizziamo alcuni metodi di libreria nei nostri test che non vengono utilizzati nell'applicazione principale; in questi casi ProGuard rimuoverà il codice dalle librerie e dovremmo aggiungere manualmente i metodi specifici a proguard.cfg.

Oh, e abbiamo anche utilizzare Guice :)

+0

Da quello che ho visto, molti clienti Roboguice non usano esplicitamente Guice. Utilizzi principalmente le iniezioni di risorse Android di Roboguice o stai eseguendo binding estesi con un modulo Guice non banale? –

+1

Facciamo un bel po 'di iniezione di materiale non robogoviante. Non sono sicuro se questo si qualificherebbe come "binding estensivo" e "non banale" però. La mia impressione generale è che non dovresti preoccuparti, ProGuard fa abbastanza bene il suo lavoro. – dmon

Problemi correlati