Android Proguard - как сохранить обработчики onClick только на основе XML-макетов

В моем приложении для Android я не создаю обработчик View on-click в коде, но полагаюсь на возможность указать его в файле макета XML, например:

   <Button
        ....
        android:onClick="onSearchClicked"
       ...../>

И затем введите метод в Activity следующим образом:

    public void onSearchClicked( View v ) {
    ........}

Значение очевидной ссылки на этот метод в моем собственном коде.

При запуске Proguard для выпускной версии, похоже, этот метод удаляется, и при щелчке происходит сбой.

Что я могу добавить в свой конфигурационный файл proguard, чтобы избежать этого, что не обязывает меня переименовывать все эти методы?

  • Аннотацию, которую я мог бы добавить к методу и предупредить прогард о?
  • Как-то указать эти типы методов, на которые ссылается xml?
  • Я предполагаю, что могу добавить ложную ссылку в код, но хотел бы избежать этого, если смогу, поскольку я не всегда буду помнить, чтобы вставить его!

Я просмотрел примеры proguard для Android и не вижу ничего для этой конкретной потребности.

Ответ 1

Кажется, это лучший ответ, так как он на 100% устойчив к наименованию таких методов:

# This will avoid all the onClick listeners referenced from XML Layouts from being removed
-keepclassmembers class * extends android.app.Activity { 
       public void *(android.view.View); 
}

Надеюсь, что это поможет.

Ответ 3

Я использую:

-keepclassmembers class * extends android.app.Activity { 
       public void on*Click(android.view.View); 
}

а затем я назову все методы onClick, такие как: onCancelBtnClick(), onBackgroundClick() и т.д.