2016-12-09 5 views
0

Запуск в эту ошибку (как и другие столкнулись с ранее): java.lang.VerifyError: Expecting a stackmap frame at branch target 18Java/Proguard: Узнайте, почему банку не проверять/проверять?

Я нашел обходной путь, добавляя -noverify к опциям JDK. Конечно, это не настоящее решение, поэтому я пытаюсь выяснить, что на самом деле не так с банкой, и почему оно не подтвердилось успешно ...

Вот два банки, которые известны для проверки/не проверять: - утверждает: https://repo.leanplum.com/com/leanplum/Leanplum/1.2.25/ - не проверяет: https://repo.leanplum.com/com/leanplum/Leanplum/1.3.1/Leanplum-1.3.1.jar

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

Проблема вызвана прогурдой, поскольку отключение защиты от переназначения progard заставляет банку проверить еще раз.

Есть ли способ узнать, почему банка не проверяется с помощью java?

ответ

1

Банки были, скорее всего, запутаны/произведены ProGuard и не содержат атрибутов StackMapFrame. Поскольку эти банки в основном используются для разработки Android, нет необходимости сохранять эти атрибуты, поскольку Dalvik не поддерживает такие атрибуты.

Если вы хотите использовать их в обычных Java-приложениях, вам нужно будет создать файлы jar с соответствующими атрибутами StackMapFrame (или использовать параметр -noverify). На самом деле вы также можете использовать ProGuard для этого, взгляните на User Guide.

+0

Я действительно нашел решение моей проблемы, которая заключалась в том, что proguard использовал правила по умолчанию для нашей библиотеки. https://github.com/robolectric/robolectric-gradle-plugin/issues/144#issuecomment-265899560 –