2013-07-10 11 views
6

Mam wiele klas w mojej aplikacji, które zapewniają metody public static void main(String[] args). Te metody są wymagane tylko podczas programowania/testowania i chciałbym, aby ProGuard je usunął (ale tylko te metody, a nie całe otaczające klasy). Próbowałem użyć -assumenosideeffects, ale to tylko wydaje się wpływać na wywołania metod, a nie na same metody. Jak zmusić Proguard do usunięcia wszystkich metod main() pomimo, że są one public i static?Jak zmusić ProGuard do usunięcia publicznej metody statycznej?

+0

nie ma optymalizacji, która usuwa już nieużywane metody? –

+0

Oczywiście po włączeniu opcji skasowania nieużywanego kodu zostaną usunięte. Chodzi o to, że nie można na pewno stwierdzić, czy metoda "public static" jest nieużywana, ponieważ może być używana spoza kodu. Dlatego muszę jakoś wymusić usunięcie. – sschuberth

+0

Uważam, że to, co daje ci proguard, to możliwość wykluczania funkcji i klas z możliwości ich modyfikowania, więc czy nie możesz użyć funkcji, których nie chcesz dotykać? –

Odpowiedz

0

ProGuard potrzebuje nasion, aby określić, które klasy/metody należy zachować. Wszelkie odniesienia do tych nasion również zostaną zachowane.

Opcja -assumenosideeffects służy do usuwania rzeczywistych wywołań metod, których wynik nie jest w żaden sposób używany, ale niekoniecznie oznacza, że ​​sama metoda została usunięta.

W twoim konkretnym przypadku prawdopodobnie masz regułę, która zachowuje wszystkie metody public static void main(String[]), ponieważ byłaby to standardowa podstawa dla aplikacji java.

Możesz analizować przyczynę utrzymania określonej metody/klasy za pomocą opcji -whyareyoukeeping.

Powiązane problemy