как сохранить все методы в классе с помощью ProGuard - PullRequest
17 голосов
/ 08 апреля 2011

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

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

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

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

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

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

Ответы [ 2 ]

20 голосов
/ 08 апреля 2011

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

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

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

Я оставляю вопрос для тех, у кого такая же проблема.

0 голосов
/ 08 апреля 2011

1001 * попробовать *

-keep public class com.mycompany.myclass

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

...