Обфускация защищенных элементов 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