В моем приложении для Android я всегда получаю VerifyErrors! И я не могу понять почему. Всякий раз, когда я включаю внешний JAR, я всегда получаю VerifyErrors, когда пытаюсь запустить свое приложение (за исключением одного раза, когда я включил Apache Log4j).
Обычно я обхожу это, беря исходный код библиотеки и добавляя его в свой проект, но я пытаюсь поставить клиентскую библиотеку GData .
Я могу получить это в исходном коде, но это зависимости (mail.jar, activate.jar, servlet-api.jar) я не могу, поэтому я получаю ошибки проверки. Я хотел бы раз и навсегда разобраться в корне этой проблемы. Я посмотрел в Интернете, но все они, кажется, говорят о неполных файлах классов? чего я не знаю.
java
android
gdata
verifyerror
Исаак Уоллер
источник
источник
Ответы:
Android использует другой формат файла класса. Вы запускаете сторонние JAR-файлы с помощью инструмента «dx», который поставляется с Android SDK?
источник
Посмотрите на LogCat и посмотрите, что вызывает verifyerror. Вероятно, это какой-то метод в классе java.lang, который не поддерживается на уровне Android SDK, который вы используете (например, String.isEmpty ()).
источник
От android-разработчиков :
В выводе "adb logcat" указывается класс, который не удалось найти, а также класс, имеющий неверную ссылку. Местоположение указывается до конкретной инструкции Dalvik. Уловка заключается в том, чтобы посмотреть журналы над исключением.
источник
WARN/dalvikvm(1052): VFY: unable to resolve static method 475: Ljavax/xml/datatype/DatatypeFactory;.newInstance ()Ljavax/xml/datatype/DatatypeFactory;
(теперь, чтобы выяснить, как обойтись без DatatypeFactory)Чтобы он работал, вам нужно добавить jar библиотеки в одну из исходных папок (даже если вы уже добавили ее как библиотеку eclipse, вам все равно нужно добавить ее как источник).
источник
Это случилось со мной прямо сейчас. Ошибка была вызвана тем, что я использовал методы из более нового SDK, который был у моего устройства.
Устройство Android 1.5 установило apk с помощью этого:
источник
Нашел интересный случай. Я использую:
Таким образом, некоторые из новых возможностей Android 4 не реализованы в Android 2.3, например
ImageView.setLayerType
. Чтобы избежать ошибки времени выполнения, просто:Этот подход следует использовать и при обработке исключений:
NetworkOnMainThreadException
не реализован в Android 2.3, поэтому при загрузке класса (и не раньше!)java.lang.VerifyError
возникает исключение .источник
java.lang.ReflectiveOperationException
что не входит в состав более старых версий Android (например, 4.2), но Линт не предупреждал меня об этом ...CameraAccessException
, который представлен в Android 5.0, но когда я запускаю устройство Android 4.3, выдается VerifyError.Если вы используете Retrolambda, возможно, вы добавили статический метод к интерфейсу (что разрешено только в Java 8).
источник
Это также может произойти из-за ошибки ограничения ссылки на Lollypop ниже версий, где он ограничен максимальным размером 65 КБ.
Возможное решение вышеуказанной проблемы
Шаг 1:
Add android-support-multidex.jar to your project. The jar can be found in your Android SDK folder /sdk/extras/android/support/multidex/library/libs
Шаг 2. Расширьте свое приложение с помощью MultiDexApplication, например,
Шаг 3: переопределить attachBaseContext
Шаг 4: Следующим шагом является добавление следующего в часть вашего приложения для Android build.gradle.
Шаг 5: Наконец, следуя общей части ваших приложений build.gradle
Для подробностей, пожалуйста, оформляйте заказ
https://developer.android.com/tools/building/multidex.html
источник
В моем случае это произошло, когда я обновился с Eclipse Indigo до Eclipse Juno: я не уверен, в чем истинная причина, но мой проект Android, над которым я работаю долгое время, перестал работать из-за этого исключения.
После многих часов попыток исправить это я нашел решение для себя.
В моем проекте Android я использую другой проект (скажем, «MyUtils»), который находится в той же рабочей области. Итак, мне нужно было сделать следующее:
Щелкните правой кнопкой мыши проект Android -> Путь сборки -> Настроить путь сборки
Теперь перейдите на вкладку «Заказ и экспорт» и установите флажок «MyUtils». Вот и все: я избавился от этого досадного исключения.
источник
Я понизил версию Gradle с 2.0.0-alpha2 до 1.5.0, которая решила эту проблему.
источник
Проблема также может быть вызвана несоответствием между двумя проектами Android. Например, если вы разработали библиотеку Android с использованием пакета com.yourcompany, тогда у вас есть проект основного приложения, использующий тот же пакет, что и базовый пакет. Затем предположим, что вы хотите изменить версию своего основного приложения, поэтому вы измените значения файла манифеста: код версии и имя версии. Если вы запустите приложение, не изменяя эти значения для библиотеки, вы получите ошибку проверки при любом вызове метода для объекта из библиотеки.
источник
Я была такая же проблема. Я собирал 2.1 r1 и обновлялся до 2.1 r3 с новым adt 17. У меня были ошибки проверки в mail.jar javamail, и это сводило меня с ума. Вот как я решил проблему:
Я попытался перестроить, и это не удалось. Я удалил каталог libs / как исходную папку и удалил ссылки на 3 файла jar в пути сборки. Затем я снова добавил папку libs / и добавил каждую банку в папке libs / в путь сборки. Теперь все работает как положено. Это странный обходной путь, но у меня он сработал.
источник
В
Eclipse 4.x
, если вы столкнулись с этой проблемой, попробуйте ниже:источник
У меня возникла эта проблема после обновления SDK. У компилятора были проблемы с моими внешними библиотеками. Я сделал это: щелкните правой кнопкой мыши проект, затем "Инструменты Android> добавить библиотеку поддержки ...", эту установку в моей библиотеке проектов "android-support-v4.jar".
источник
java.lang.VerifyError
означает, что ваш скомпилированный байт-код относится к чему-то, что Android не может найти во время выполнения. Эта verifyError вызывает у меня только проблемы с kitkat4.4 и меньшей версией, которых нет в вышеуказанной версии , даже если я запускал одну и ту же сборку на обоих устройствах. когда я использовал парсер jackson json более старой версии, он показываетjava.lang.VerifyError
Затем я изменил Dependancy на последнюю версию 2.2 на 2.7 без основной библиотеки (когда я включаю core2.7, он дает verifyError), тогда он работает. это означает, что методы и другое содержимое ядра перенесено в последнюю версию Databind2.7 . Это исправит мои проблемы.
источник
Я тоже получаю VerfiyError ... не могу найти настоящую причину. Это помогает обернуть новые строки кода в метод (Eclipse, «Извлечь метод ...»). Так что в моем случае причина не в неподдерживаемом методе.
источник
У меня была очень похожая проблема. Я добавил jar-файлы Apache POI, и проблема возникла при обновлении до Android SDK 22.3.
Я проверил частные библиотеки Android, поэтому это не было распространенной проблемой с Android SDK. Я снял отметку со всех jar-файлов Apache POI и добавил один за другим. Я обнаружил, что poi-3.9-20121203.jar должен быть перед poi-ooxml-3.9-20121203.jar . Иначе не получится.
источник
Если у вас есть тесты, попробуйте закомментировать эту строку из своего
build.grade
файла:Для меня это вызвало исключения VerifyError для классов, которые используют функции Java 1.7, в частности, операторы переключения строк.
источник
У меня была такая же проблема после выполнения git pull.
Решение: Сборка -> Чистый проект.
Надеюсь это поможет.
источник
Нашел другой случай.
Условия:
И результат - бум! java.lang.VerifyError при попытке доступа к классу, который использует этот интерфейс. Похоже, Android (4.4. * В моем случае) не любит статические методы в интерфейсах. Удаление статического метода из интерфейса устраняет VerifyError.
источник
У меня тоже была эта проблема, как и у моих банок в пользовательской библиотеке ...
Я решил эту проблему, добавив их в папку lib, а затем добавив в свойствах сборки в eclipse ...
В первый раз, когда я это сделал, это не сработало, но затем я удалил их и снова прочитал, и он начал работать ...
немного странный! но теперь все время работает.
Удачи
источник
Я закодировал методы / класс Android API, которые находятся в SDK 2.1, и пытался запустить его на эмуляторе Android 1.6. Итак, я получил эту ошибку.
РЕШЕНИЕ: Поменял на правильную версию эмулятора.
ЭТО РАБОТАЛО ДЛЯ МЕНЯ .. Спасибо.
источник
Для потомков я получил эту ошибку, потому что я использовал
Arrays.copyOf()
метод, который не поддерживается Java 1.5, который соответствует уровню Android 4. Поскольку я работал, включая библиотеки, разработанные под 1.6, они компилировались нормально. Я увидел проблемы только тогда, когда переместил рассматриваемый класс в свой проект Android - тогда ошибка была выделена.В этой строке я пытался сделать,
new DaoConfigArray
и у этого класса была следующая строка:Что еще более усложнило, так это то, что строка 71 указывала на
ThreadLocal
инициализацию, которая, как я думал, была причиной проблемы изначально.источник
Мне пришлось удалить зависимые проекты и вместо этого скомпилировать зависимые проекты jar и включить их в папку libs.
источник
Я уверен, что моя причина отличалась от вашей, но, поскольку это один из самых популярных запросов при поиске «Android java.lang.VerifyError», я подумал, что запишу его здесь для потомков.
У меня было несколько занятий по следующим направлениям:
И способ, который сделал:
Пока этот код присутствовал в файле, я получал VerifyError при первой загрузке класса, содержащего этот метод. Разделение его на два отдельных метода (один, который имел дело только с B, и другой, который имел дело только с C) устранил проблему.
источник
В моем случае эта ошибка возникает из-за того, что моя служба Google Play не самая новая. .
Если ваш проект не поддерживает какой-либо класс в .jar, возникает эта ошибка (например, ImageView.setLayerType, AdvertisingIdClient и т. Д.).
источник
Я только что определил другую ситуацию, которая возникает не только из-за того, что библиотеки не dx 'ed. У меня есть AsyncTask с очень длинным методом doInBackground. По какой-то причине этот метод с более чем 145 строками начал ломаться. Это произошло в приложении 2.3. Когда я просто инкапсулировал некоторые части в методы, все работало нормально.
Поэтому для тех, кто не смог найти класс, который был неправильно dx 'ed, попробуйте уменьшить длину вашего метода.
источник
Для меня проблема на самом деле заключалась в том, что я использовал предложение multi-catch где-то в классе, которое является функцией Java 7 (и API 19+). Так что он вылетал
VerifyError
на всех устройствах до 19.источник
Для меня это было корреляцией между compileSdkVersion и buildToolsVersion. Я имел:
Я изменил его на:
источник
Для меня это проблема compileSdkVersion. Когда я использовал уровень API 21 в конкретном приложении для Android ( https://github.com/android10/Android-AOPExample ):
произошла ошибка java.lang.verifyerror. Поэтому я изменил compileSdkVersion на 19
Это сработало. Я думаю, что это может быть проблема SDK buildTools, и это нормально, когда уровень API <21.
источник