2011-10-24 17 views
18

Używam proguard do zaciemniania mojej aplikacji na Androida. Aplikacja na Androida zawiera trochę natywnego kodu, który sprawia, że ​​wywołania zwrotne są w pełni kwalifikowanymi metodami java. Nie muszę zamazywać tych klas i nazw ich metod. Poniższe poprawnie zachowuje nazwy klas, ale nie nazwy metod.W proguardzie, jak zachować zestaw nazw metod klas?

-keep public class com.me.dontobf.* 
-keepnames public class com.me.dontobf.* 

Odpowiedz

48

Dla metod natywnych: ProGuard manual > Examples > Processing native methods

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

W tym przypadku, dla metod zwrotnych: ProGuard manual > Examples > Processing callback methods

-keep class mypackage.MyCallbackClass { 
    void myCallbackMethod(java.lang.String); 
} 

Albo na przykład, jeśli wszystkie metody publiczne mogą być metody wywołania zwrotnego:

-keep class mypackage.MyCallbackClass { 
    public <methods>; 
} 

Pewnie też trzeba zachować jakieś zajęcia programowe, które występują w deskryptorów metod.

+0

to działa. Dziękuję Ci. – ab11

+0

To mi bardzo pomaga. Dziękuję Ci! –

+0

Jak mogę zachować kod zdefiniowany przez użytkownika? –

2

Spróbuj:

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

z podręcznika PROGUARD: http://proguard.sourceforge.net/manual/examples.html#native

+2

Twoja sugestia nie działa dla mnie. Muszę zachować nazwy metod obcych metod, które są wywoływane z natywnego kodu. Twoja sugestia zachowuje nazwy klas klas zawierających natywne metody. – ab11

Powiązane problemy