Обфускация Java защищенных элементов с помощью ProGuard - PullRequest
2 голосов
/ 01 ноября 2011

Я занимаюсь разработкой библиотеки, которая состоит из нескольких отдельных классов, которые работают вместе для выполнения функции библиотеки.Один из классов затем предоставляет несколько открытых функций, которые используют весь внешний код для использования библиотеки.

Поскольку разные классы должны взаимодействовать, я помещаю их все в один и тот же пакет и получаю много "Защищенные "вещи (классы и функции).

Проблема в том, что ProGuard по умолчанию не будет запутывать эти защищенные элементы, так как есть вероятность, что они позже могут быть объединены с другим классом в том же пакете.Я хотел бы предотвратить это, однако, по соображениям безопасности.

Итак, вопрос в том, могу ли я заставить ProGuard запутать эти защищенные элементы в дополнение к частным?

Чтобы поставить его другимКстати, есть ли способ сказать ProGuard: «Я закончил добавлять вещи в этот пакет, пожалуйста, запутывайте не только личные вещи в каждом классе, но и защищенные вещи в пакете»?

Спасибо!

1 Ответ

7 голосов
/ 01 ноября 2011

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

-keep public class * {
    public protected *;
}

В этой спецификации хранятся все открытые и защищенные классы, поля и методы.ProGuard запутывает все остальное.Если вы хотите скрыть больше, вам нужно указать меньшее количество элементов для хранения, например, с одним или несколькими вариантами, подобными этому:

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

Вы можете использовать шаблоны или другие шаблоны, как описано в руководстве ProGuard.

Таким образом, по умолчанию ProGuard запутывает все, если вы не указали сохранить некоторые элементы.ProGuard не может угадать, что вы хотели бы сохранить.

...