2012-06-10 21 views
18

Witam Piszę aplikację na Androida i skonfigurowałem program Proguard do zaciemniania mojej aplikacji. Używam jednak programu ładującego klasy do dynamicznego ładowania różnych rozszerzeń do mojej aplikacji. Problem polega na tym, że nie ładują się poprawnie, jeśli ich nazwy zostały zmienione. Jak powstrzymać Proguard przed zaciemnianiem konkretnych nazw klas?Proguard zachować nazwy klas?

Odpowiedz

27

Użyj opcji -keepnames w proguard.cfg

Patrz ręcznego https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:

-keepnames class_specification

Skrót -keep,allowshrinking class_specification

Określa klas i członków klasy, których nazwiska należy zachować, jeśli nie są usunięto w fazie kurczenia. Na przykład możesz zachować wszystkie klasy klas, które implementują interfejs Serializable, aby przetworzony kod pozostał zgodny z dowolnymi pierwotnie serializowanymi klasami. Klasy, które nie są w ogóle używane, wciąż mogą zostać usunięte. Dotyczy tylko zaciemniania.

+3

Tak więc wpisz: -keepnames com.randompackage.lol.ClassName – Nik

+0

OK, czy można to zrobić z całą paczką? – Nik

+0

Tak, używasz * symbolu wieloznacznego. tzn. -keepnames com.randompackage.lol. * Zachowa wszystkie klasy w lol –

24

Dzięki temu classnames nienaruszone:

-keepnames class com.somepackage.* 
9

Handy wskazówka dla każdego, kto nie chce ProGuard zmienić dowolną nazwę Klasa:

# please KEEP ALL THE NAMES 
-keepnames class ** { *; } 

W ten sposób można uzyskać czytelne ślady stosu wciąż wyrzucając rzeczy, których nie potrzebujesz. :-)

+9

'' '-dontobfuscate''' jest właściwym sposobem na wyłączenie zaciemniania. –

+0

Nieprawidłowy sposób. Lepiej wyłączyć obfuskację za pomocą tej konfiguracji: "-dontobfuscate/n -optimizations! Code/allocation/variable" – oxied

Powiązane problemy