Android java.lang.VerifyError? - PullRequest
       26

Android java.lang.VerifyError?

97 голосов
/ 21 марта 2009

В моем приложении для Android я всегда получаю VerifyErrors! И я не могу понять, почему. Всякий раз, когда я включаю внешний JAR, я всегда получаю VerifyErrors при попытке запустить свое приложение (за исключением одного раза, когда я включил Apache Log4j.)

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

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

Ответы [ 30 ]

2 голосов
/ 20 ноября 2012

У меня проблема после обновления SDK. У компилятора были проблемы с моими внешними библиотеками. Я сделал это: щелкните правой кнопкой мыши по проекту, затем «Инструменты Android> Добавить библиотеку suport ...», чтобы установить в моей библиотеке проекта «Android-Support-v4.jar».

2 голосов
/ 17 февраля 2012

Проблема также может быть вызвана несоответствием между двумя проектами Android. Например, если вы разработали библиотеку Android с использованием пакета «com.yourcompany», то у вас есть проект основного приложения, использующий тот же пакет, что и базовый пакет. Затем допустим, что вы хотите изменить версию своего основного приложения, чтобы вы изменили значения файла манифеста: Код версии и Имя версии. Если вы запустите свое приложение без изменения этих значений для библиотеки, вы получите ошибку проверки при любом вызове метода для объекта из библиотеки.

2 голосов
/ 23 сентября 2012

В Eclipse 4.x, если вы столкнулись с этой проблемой, попробуйте ниже:

  1. перенести все включенные сторонние банки в User-Libaray
  2. поднимите пользовательскую библиотеку до библиотеки Android и проверьте ее на вкладке "Порядок и экспорт"
  3. очистить и восстановить для запуска
2 голосов
/ 01 апреля 2012

У меня была такая же проблема. Я строил с 2.1 r1 и обновил до 2.1 r3 с новым adt 17. Я проверял ошибки в mail.jar javamail, и это сводило меня с ума. Вот как я решил проблему:

  1. создал папку libs / и добавил банки.
  2. щелкните правой кнопкой мыши> добавить как исходную папку

Я попытался восстановить, и это не удалось. Я удалил каталог libs / как исходную папку и удалил ссылки на файлы 3 jar в пути сборки. Затем я снова добавил папку libs / и добавил каждый jar-файл из папки libs / в путь сборки. Теперь все работает как положено. Это странный обходной путь, но он сработал для меня.

1 голос
/ 18 февраля 2016

java.lang.VerifyError означает, что ваш скомпилированный байт-код ссылается на то, что Android не может найти во время выполнения. Эта ошибка verifyError выдает меня только с kitkat4.4 и более ранней версией, которой нет в вышеприведенной версии , даже если я запускал одну и ту же сборку на обоих устройствах. когда я использовал парсон джексона json более старой версии, он показывает java.lang.VerifyError

compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.2.+'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+'

Затем я изменил Dependancy на последнюю версию 2.2 до 2.7 без библиотеки ядра (когда я включаю core2.7, он выдает verifyError), затем он работает. это означает, что методы и другое содержимое core перенесено в последнюю версию Databind2.7 . Это исправило мои проблемы.

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'
1 голос
/ 23 октября 2014

У меня была такая же проблема после создания мерзавца.

Решение: Build -> Clean Project.

Надеюсь, это поможет.

1 голос
/ 26 июля 2014

Если у вас есть тесты, попробуйте закомментировать эту строку из вашего build.grade файла:

testCoverageEnabled = true

Для меня это вызвало исключения VerifyError для классов, которые используют функции Java 1.7, особенно операторы строкового переключателя.

1 голос
/ 21 марта 2010

Я тоже получаю VerfiyError ... не могу найти реальную причину. Это помогает обернуть новые строки кода в метод (Eclipse, «Extract Method ...»). Так что в моем случае причина не в неподдерживаемом методе.

1 голос
/ 22 февраля 2015

Я нашел другой случай.

Условия:

  • Использовать Retrolambda (не уверен, если это необходимо);
  • Создание статического метода в интерфейсе.

И результат - бум! java.lang.VerifyError при попытке доступа к классу, который использует этот интерфейс. Похоже, что Android (4.4. * В моем случае) не любит статические методы в интерфейсах. Удаление статического метода из интерфейса убирает VerifyError.

1 голос
/ 08 января 2014

У меня была очень похожая проблема. Я добавил Apache POI фляги, и проблема появилась, когда я обновил до Android SDK 22.3.

Я проверил частные библиотеки Android, так что это не было общей проблемой с Android SDK. Я снял отметки со всех Apache POI банок и добавил один за другим. Я обнаружил, что poi-3.9-20121203.jar должно быть до poi-ooxml-3.9-20121203.jar . В противном случае это не сработает.

...