2013-07-10 11 views
6

Nella mia applicazione sono presenti più classi che forniscono i metodi public static void main(String[] args). Questi metodi sono richiesti solo durante lo sviluppo/test e mi piacerebbe che ProGuard li rimuovesse (ma solo questi metodi, non le intere classi circostanti). Ho provato a utilizzare -assumenosideeffects, ma sembra che ciò influenzi solo le chiamate ai metodi, non i metodi stessi. Come posso forzare Proguard a rimuovere l'intero metodo main() nonostante siano public e static?Come forzare ProGuard a rimuovere il metodo statico pubblico?

+0

non esiste un'ottimizzazione che rimuove già i metodi non utilizzati? –

+0

Certo che c'è, se si attiva la riduzione del codice inutilizzato viene rimosso. Ma il punto è che non si può dire con certezza se un metodo 'public static' è inutilizzato, perché potrebbe essere usato al di fuori del proprio codice. Ecco perché ho bisogno di forzare la rimozione in qualche modo. – sschuberth

+0

penso che ciò che proguard ti dà sia la possibilità di escludere funzioni e classi da essere modificati da esso, quindi non puoi usarlo sulle funzioni che desideri che non tocchino? –

risposta

0

ProGuard ha bisogno di semi per determinare quali classi/metodi devono essere mantenuti. Verranno inoltre mantenuti tutti i riferimenti a questi semi.

L'opzione -assumenosideeffects viene utilizzata per rimuovere le chiamate effettive ai metodi il cui risultato non è utilizzato in alcun modo, ma non significa necessariamente che il metodo stesso sia stato rimosso.

Nel tuo caso specifico, probabilmente hai una regola che mantiene tutti i metodi public static void main(String[]) in quanto sarebbe il seme standard per un'applicazione java.

È possibile analizzare il motivo per cui uno specifico metodo/classe viene mantenuto utilizzando l'opzione -whyareyoukeeping.

Problemi correlati