Подтвердить что ты не робот

Как я могу сказать ProGuard, чтобы сохранить мою функцию, которая используется для onClick?

Я использую атрибут android:onClick в некоторых моих файлах макета .xml для моего приложения для Android, но ProGuard удаляет эти методы из моего кода, когда он запускается, потому что ничто в моем коде не вызывает их.

Вместо того, чтобы указывать каждую функцию по отдельности, я хотел бы называть их чем-то вроде listener_functionName и использовать подстановочные знаки, например -keep listener_* (я знаю, что это неверно, но, надеюсь, это иллюстрирует мою цель).

Если это возможно, это было бы здорово, но если нет, мне все равно нужно знать, как указать эти функции в файле proguard.cfg. Любая помощь приветствуется.

4b9b3361

Ответ 1

Согласно proguard документация:

Поля и методы также могут быть с использованием регулярных выражений. Имена могут содержать следующие подстановочные знаки:? соответствует любому синглу символ в имени метода. * соответствует любой части имени метода.

поэтому вы найдете указание

-keep class com.example.MyClass {
  public void listener_*(android.view.View);
}

в ваших флагах proguard.

Ответ 2

Вы можете сделать это один раз для всех своих классов таким образом:

-keepclasseswithmembers class * {
    void listener_*(...);
}

Ответ 3

Немного более жадный подход, который должен содержать все методы onClick:

-keepclassmembers class * {
    public void * (android.view.View);
}

== > , так что в основном каждый публичный метод, который имеет Android View, как единственный Paramater, должен выдержать ProGuard.