В итоге я обнаружил, что просто держать всех учеников недостаточно для правильной работы моего приложения и не нужно.Я добавил в файл настроек это:
-keepclasseswithmembers class * {
void onClick*(...);
}
-keepclasseswithmembers class * {
*** *Callback(...);
}
Случай с onClick * относится ко всем методам, к которым я обращаюсь в Android: атрибут onClick в файлах макета .xml (имена всех таких методов начинаю с 'onClick ').
Случай с * Callback предназначен для всех методов обратного вызова, которые я вызываю из собственного кода (через JNI).Я добавляю суффикс 'Callback' к имени каждого такого метода.
Также я добавил несколько строк для некоторых особых случаев с переменными, которые я использую из собственного кода, например:
-keep class com.myapp.mypackage.SomeMyClass {
*** position;
}
(для переменной с именем 'position' в классе с именем 'SomeMyClass' из пакета com.myapp.mypackage)
Все это потому, что эти onClick, callback и т. д. должны не только присутствовать, но и храниться сих оригинальные имена.Другие вещи, которые ProGuard может свободно оптимизировать.
Важен также случай с нативными методами, но для него было объявление в сгенерированном из Eclipse файле:
-keepclasseswithmembernames class * {
native <methods>;
}