2013-07-15 6 views
5

Chcę zbudować bibliotekę, ale nie chcę, aby niektóre klasy były narażone na działanie programisty, ale chcę, aby były wystawione na mój kod biblioteki i testy łatwo.Jak ukryć publiczne zajęcia w bibliotece Jar przy użyciu ProGuarda (lub w jakikolwiek inny sposób)?

Czy istnieje sposób na ukrycie określonych klas publicznych przy użyciu ProGuarda lub w jakikolwiek inny sposób (np. Notacja @hide używana w pakiecie Android SDK)?

+0

"narażone na mój kod" masz na myśli swój kod w bibliotece lub gdzieś indziej? – njzk2

+0

Odsłonięty do kodu w mojej bibliotece –

+0

Więc dlaczego są one "publiczne"? Czy twoja biblioteka jest tak skomplikowana, że ​​potrzebujesz wielu pakietów? Czy są one "publiczne", ponieważ są wymagane przez nadklasy/interfejsy? – CommonsWare

Odpowiedz

0

Cały punkt obfuscatin polega na tym, że ukrywa on metodę dla ludzi na zewnątrz, ale odniesienia wewnątrz biblioteki są aktualizowane. Zazwyczaj będziesz miał

void myMethodWithAVeryExplicitName() { 
    // Do Stuff 
} 

void otherMethod() { 
    // Call the first method 
    myMethodWithAVeryExplicitName(); 
} 

To będzie ukrywane jako:

void a() { 
    // Do Stuff 
} 

void b() { 
    // Call the first method 
    a(); 
} 

Następnie Proguard ma wiele opcji dla kasował lub utrzymywanie klas publicznych, klas, które rozszerzają konkretnych klas, członkowie ..

0

Może pomocna będzie fasada (http://en.wikipedia.org/wiki/Facade_pattern). Cel tego wzoru jest podobny do twojego problemu. Oferuje zredukowany do świata zewnętrznego, podczas gdy zachowuje wszystkie dzwony i gwizdki wewnątrz biblioteki.