Объркайте защитените с Java елементи с помощта на ProGuard

Разработвам библиотека, която се състои от няколко отделни класа, които работят заедно, за да изпълняват функцията на библиотеката. След това един от класовете разкрива шепа публични функции, които всички външни кодират, за да използват библиотеката.

Тъй като различните класове трябва да си взаимодействат, ги поставям всички в един и същи пакет и имам много "защитени" неща (класове и функции).

Проблемът е, че ProGuard по подразбиране няма да скрие тези защитени елементи, тъй като има шанс те по-късно да бъдат комбинирани с друг клас в същия пакет. Бих искал обаче да предотвратя това от съображения за сигурност.

Така че въпросът е, мога ли да принудя ProGuard да скрие тези защитени елементи в допълнение към частните?

Казано по друг начин, има ли начин да кажете на ProGuard „Приключих с добавянето на неща към този пакет, моля, объркайте не само личните неща във всеки клас, но и защитените неща в пакета“?

Благодаря!


person Scot    schedule 01.11.2011    source източник


Отговори (1)


ProGuard замъглява всичко, което не съответства на една от опциите -keep във вашата конфигурация. Например от ръководството на ProGuard > Примери > Типична библиотека:

-keep public class * {
    public protected *;
}

Тази спецификация запазва всички публични и защитени класове, полета и методи. ProGuard замъглява всичко друго. Ако искате да объркате повече, трябва да посочите по-малко елементи, които да запазите, напр. с една или повече опции като тази:

-keep public class mypackage.MyPublicClass {
    public void myPublicMethod();
}

Можете да използвате заместващи символи или други шаблони, както е документирано в ръководството на ProGuard.

Така че по подразбиране ProGuard замъглява всичко, освен ако не посочите да запазите някои елементи. ProGuard не може да познае какво искате да запазите.

person Eric Lafortune    schedule 01.11.2011