Как сохранить все методы в классе с помощью ProGuard

Я использую ProGuard для оптимизации моего приложения для Android. Однако для тестирования инструментария для Android мне нужны некоторые (но не все) классы, чтобы содержать всех участников. Я пробовал различные подходы, последнее:

-keepclassmembers public class com.mycompany.myclass {
    *;
}

Но на удивление я все равно получаю

java.lang.NoSuchMethodError: com.mycompany.myclass.<init>

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

Кто-нибудь знает правильный синтаксис, чтобы сохранить класс полностью неизменным и нетронутым ProGuard?

Ответы

Ответ 1

Ну, это время исповеди. Вопрос в том, что это не так. -keepclassmembers правильный. Проблема возникла из-за того, что партнер команды нарушил код, и конструктор действительно не был там.

Обратите внимание, что если есть изменение, которое оптимизируется для всего класса, вы должны использовать -keep в качестве предлагаемых kharles, но {*;} необходим, чтобы все методы оставались на месте.

Обратите внимание, что {*;} предназначен только для тестирования. Для производства следует использовать более мелкозернистый подход.

Я задаю вопрос для кого-то с той же проблемой.

Ответ 2

попробовать

-keep public class com.mycompany.myclass

(используйте keep и no {*;})