ClassFormatError после оптимизации Proguard (не запутывает) приложения с поддержкой Guice - PullRequest
3 голосов
/ 20 мая 2011

У меня приложение с поддержкой Guice работает нормально, но когда я оптимизирую его (т.е. уменьшаю размер) с помощью Proguard, я получаю следующее сообщение об ошибке (я ловлю его обработчиком необработанных исключений):

java.lang.ClassFormatError: LVTT entry for 'that' in class file
com/google/inject/internal/util/$ImmutableList$RegularImmutableList
does not match any LVT entry

Это препятствует правильной работе приложения.Я не запутываю код.

Кто-нибудь знает, что происходит?Есть ли решение / обходной путь?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 мая 2011

Пожалуйста, убедитесь, что вы используете последнюю версию ProGuard версии 4.6 на момент написания этой статьи.

На основании других отчетов, тем не менее, на этапе оптимизации может быть ошибка (# 3161222),не всегда правильно обрабатывают необязательные атрибуты LocalVariableTable и LocalVariableTypeTable.Таким образом, три простых обходных пути:

  • компилируются без этих атрибутов (javac -g: lines, source) или
  • позволяют шагу запутывания удалять атрибуты (не указывайте-dontobfuscate, не указывать -keepattributes LocalVariableTable, LocalVariableTypeTable) или
  • не оптимизировать (-dontoptimize).

Атрибуты предназначены для отладки, и, как правило, не оченьполезно или даже желательно в запутанном коде.

1 голос
/ 20 мая 2011

Иногда ProGuard вырывает больше вещей, чем следует при сжатии. ProGuard удалит все ссылки на классы / члены, которые, по его мнению, не используются в вашем приложении, если вы явно не скажете ему сохранить эти классы / члены.

Вы можете сохранить классы / члены, используя Опции хранения ProGuard . пример использования страницы имеет несколько примеров опций хранения.

Иногда я вижу, что мои приложения ссылаются на реализацию интерфейса, на которую не ссылаются, когда вы просто смотрите на код. Я просто добавляю новую опцию хранения каждый раз, когда обнаруживаю, что чего-то не хватает. Возможно, у кого-то есть лучшее предложение, как отследить эти вещи?

...