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?
6
A
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
.
nie ma optymalizacji, która usuwa już nieużywane metody? –
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
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ć? –