Я недавно активировал ProGuard для своего проекта Eclipse Android.После добавления внешних библиотек и динамически ссылающихся классов в proguard.cfg я не получаю никаких ошибок при сборке apk.Однако я получаю NoSuchMethodError при попытке запустить установленное приложение.
Я сузил его до определенного метода, вызываемого в методе onCreate основного действия.Чтобы упростить ситуацию, вот как выглядят класс и метод (я пропустил много кода, но я думаю, что это должно проиллюстрировать это):
public class TestMain extends TabActivity implements OnSharedPreferenceChangeListener{
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
testMethod();
}
}
testMethod () определяется следующим образом:
private void testMethod() {
int charsLeft = maxPostMessageLength - someEditText.length();
...
}
Когда я удаляю часть someEditText.length (), приложение запускается.Итак, как я вижу, метод, который не может быть найден, это метод EditText.length ().Странно, однако, приложение также запускается, когда я удаляю «someEditText.length ()» из testMethod и помещаю его непосредственно в метод onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test = someEditText.length();
testMethod();
}
Кто-нибудь знает, как я могу избавиться от этой ошибкии почему я могу вызвать someEditText.length () непосредственно в методе onCreate, но не в методе, вызываемом методом onCreate?Конечно, без использования Proguard приложение работает нормально.
Редактировать: я пробовал опции -dontshrink, -dontobfuscate и -dontoptimzie в proguard.cfg.С -dontoptimize приложение запускается без ошибок.Тем не менее, было бы интересно, что именно вызывает эту конкретную ошибку.