android onClick события и про охранник - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь запутать свое приложение перед загрузкой на рынок. Я настроил pro guard и уже обработал проблему Serialzie ( prog guard maul - serialize ), однако у меня все еще есть проблема (MethodNotFoundException) при попытке нажать одну из кнопок на домашнем экране. это простые LinearLayout с фоном, которые в xml имеют атрибут android: onClick = "doOnClick". в моей HomeScreenActivity у меня есть метод с именем:
public void doOnClick(View v){...}
, который следует вызывать при каждом нажатии кнопки. код работает GREAT , когда не запутан, но однажды запутанный загрузчик класса Android не может найти мой метод. Прежде чем перейти к использованию только кода, а не обратных вызовов xml (возможно, желательно), я хотел бы узнать, есть ли хороший способ обойти это. Попытка предотвратить запутывание методов у меня не сработала (попытка предотвратить запутывание методов, которые расширяют Activity и имеют форму public void on (android.view.View) или public void On (android.view.View).

Если кто-нибудь сделал это, я буду признателен за подсказку: -)

Ответы [ 3 ]

0 голосов
/ 12 июля 2011

Добавьте это в ваш файл proguards.

-keep class com.android.toto.ClassName {
    public void doOnClick(android.view.View);
}
0 голосов
/ 13 июля 2011

-keep или keepclasswithmemebers не применяются, поскольку у меня уже есть -keep public class * extends android.app.Activity, который будет включать ВСЕ Действия.

Мне удалось найти проблему, в которой методы были полностью удалены оптимизацией proguard и заменены напрямой встроенный код.Это происходит потому, что в коде нет конкретных вызовов этих функций;обратите внимание, что вызовы XML для кода не учитываются.

добавление следующего к конфигурации proguard решает проблему:

-keepclassmembers class * extends android.app.Activity {
   public void *On*Click(android.view.View);
   public void *on*Click(android.view.View);
}
0 голосов
/ 12 июля 2011

Это действительно просто, это должно работать.

-keepclasseswithmembers class MyActivity {
   public void doOnClick(android.view.View);
}
...