Android java.lang.VerifyError?

голоса
94

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

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

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

Задан 21/03/2009 в 06:24
источник пользователем
На других языках...                            


30 ответов

голоса
113

Посмотрите на LogCat и посмотреть, что вызывает VerifyError. Это, наверное, какой-то метод в классе java.lang, который не поддерживается на уровне андроид SDK вы используете (например, String.isEmpty ()).

Ответил 04/02/2010 d 21:17
источник пользователем

голоса
54

От андроид-разработчиков :

Выход из «ADB LogCat» указывает на класс, который не может быть найден, а также класс, который имеет плохую ссылку. Местоположение определяется вплоть до конкретной инструкции Dalvik. Хитрость заключается в том, чтобы посмотреть в логах выше, за исключением.

Ответил 23/08/2010 d 16:37
источник пользователем

голоса
32

Android использует другой формат файла класса. Вы работаете на 3-й файлы JAR партия через инструмент «DX», который поставляется с Android SDK?

Ответил 21/03/2009 d 08:22
источник пользователем

голоса
14

Для того, чтобы сделать его работу необходимо добавить баночку библиотеки к одному из исходных папок (даже если вы уже добавили его в библиотеке затмения, вам все еще нужно, чтобы добавить его в качестве источника).

  1. Создайте каталог в проекте (бывший «LIBS») и положить библиотеку банку там.
  2. Добавить каталог в пути класса сборки путем (нажмите правую кнопку мыши на папку и выберите «Построить путь» -> «Использовать в качестве исходной папки»).
  3. Перестроить свой проект.
Ответил 29/11/2010 d 09:21
источник пользователем

голоса
8

Это случилось со мной прямо сейчас. Ошибка была вызвана тем, что я использую методы из более нового SDK, что мое устройство было.

Android 1.5 устройство установлено с помощью этого APK:

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/>
Ответил 11/05/2010 d 18:04
источник пользователем

голоса
7

Если вы используете Retrolambda вы могли бы добавить статический метод к интерфейсу (который разрешается только в Java 8).

Ответил 23/03/2015 d 13:11
источник пользователем

голоса
7

Я нашел интересный случай. Я использую:

<uses-sdk
   android:minSdkVersion="9"
   android:targetSdkVersion="18" />

Таким образом , некоторые из новых Android 4 возможностей не implenented в Android 2.3 , как ImageView.setLayerType. Чтобы избежать ошибок во время выполнения просто:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

Такой подход следует использовать также с исключениями обработок:

} catch (NetworkOnMainThreadException nomte) {
   // log this exception
} catch (SocketTimeoutException socketTimeoutException) {
   // log this exception
}

NetworkOnMainThreadExceptionне реализована в Android 2.3 так , когда класс загружается (не раньше!) исключение java.lang.VerifyErrorпроисходит.

Ответил 19/09/2013 d 20:19
источник пользователем

голоса
6

Это также может происходить из-за ссылок на предельную ошибку на Lollypop ниже версий, где она ограничена Шифрование до размера не более 65K

Возможное решение данного вопроса

Шаг 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, для, например,

public class MyApplication extends MultiDexApplication

Шаг 3: Override attachBaseContext

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

Шаг 4: Следующий шаг должен добавить следующее андроида часть ваших приложений build.gradle

 dexOptions {
      preDexLibraries = false
   }

Шаг 5: Наконец, следуя общей части ваших приложений build.gradle

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

Для получения дополнительной информации, пожалуйста, проверка

https://developer.android.com/tools/building/multidex.html

Ответил 30/07/2015 d 14:08
источник пользователем

голоса
3

Я понижаем Gradle версии от 2.0.0-альфа2 до 1.5.0, что решить эту проблему.

Ответил 15/12/2015 d 04:46
источник пользователем

голоса
3

В моем случае, это случилось, когда я обновил из Eclipse, Indigo для Eclipse, Juno: Я не уверен, что истинная причина, но, мой Android проект, который я работаю на долгое время прекратил работу из-за этого исключения.

После многих часов , пытаясь исправить это, я нашел решение для меня.

В моей Android проекте, я использую другой проект (скажем, «MyUtils»), который находится в том же рабочем пространстве. Таким образом, мне нужно сделать следующее:

Щелкните правой кнопкой мыши на Android проекта -> Build путь -> Настройка построить путь

Теперь перейдите на вкладку «Порядок и экспорт» и сделать «MyUtils» проверяются. Вот именно: я избавилась от этого раздражающего исключения.

Ответил 14/03/2013 d 09:20
источник пользователем

голоса
3

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

  1. перенести все включенные 3th сторонние банки в User-Libaray
  2. двигаться вверх пользователь LIB перед андроидом Lib и проверить его на вкладке Порядка и экспорта
  3. очистки и восстановления для запуска
Ответил 23/09/2012 d 08:08
источник пользователем

голоса
2

У меня этот вопрос после обновления SDK. Составитель был проблемы с внешним Librarys. Я сделал это: щелкните правой кнопкой мыши на проекте, затем «Android Tools> добавить SUPORT библиотеку ...» это установить на мой проект библиотеки «андроид-поддержка-v4.jar».

Ответил 20/11/2012 d 16:23
источник пользователем

голоса
2

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

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

я попробовал восстановить и это не удалось. Я удалил ЛИЭС / каталог в качестве исходной папки и удалить реф в 3 баночке файлов в пути сборки. Тогда я снова добавил ЛИЭС / папку, и добавил каждую банку в ЛИЭС / папку в путь сборки. Теперь он работает, как ожидалось. Это странно обходной путь, но он работал на меня.

Ответил 01/04/2012 d 17:07
источник пользователем

голоса
2

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

Ответил 17/02/2012 d 14:30
источник пользователем

голоса
1

Я нашел еще один случай.

условия:

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

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

Ответил 22/02/2015 d 09:21
источник пользователем

голоса
1

У меня была та же проблема, после того, как сделать GIT тянуть.

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

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

Ответил 23/10/2014 d 13:41
источник пользователем

голоса
1

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

testCoverageEnabled = true

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

Ответил 26/07/2014 d 14:57
источник пользователем

голоса
1

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

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

Ответил 08/01/2014 d 13:29
источник пользователем

голоса
1

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

Ответил 21/03/2010 d 15:21
источник пользователем

голоса
0

Для меня это проблема compileSdkVersion. Когда я использовал уровень API 21 в конкретном приложении андроида ( https://github.com/android10/Android-AOPExample ):

compileSdkVersion 21

java.lang.verifyerror произошло. Поэтому я изменил compileSdkVersion до 19

compileSdkVersion 19

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

Ответил 26/08/2016 d 01:45
источник пользователем

голоса
0

Для меня это было в корреляции между compileSdkVersion и buildToolsVersion. Я имел:

compileSdkVersion 21
buildToolsVersion '19.1.0'

Я изменил его:

compileSdkVersion 21
buildToolsVersion '21.1.2'
Ответил 11/03/2016 d 21:20
источник пользователем

голоса
0

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.+'

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

compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.0-rc3'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.0-rc3'
Ответил 18/02/2016 d 12:31
источник пользователем

голоса
0

Для меня этот вопрос в конечном итоге на самом деле в том , что я использую пункт мульти-поймать где - то в классе , который является Java 7 особенности (и API 19+). Так что это будет столкновение с VerifyErrorна всех предварительно 19 устройств.

Ответил 14/09/2015 d 18:12
источник пользователем

голоса
0

Я просто определил другую ситуацию , что это происходит не только из - за LIBS не дх «е изд. У меня есть AsyncTask с очень длинной doInBackground mehtod. По какой - то причине этот метод с более чем 145 линий начали ломаться. Это произошло на 2.3 приложения. Когда я только инкапсулированный некоторые части в методы, он работал отлично.

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

Ответил 18/08/2015 d 12:57
источник пользователем

голоса
0

В моем случае, эта ошибка происходит потому , что мой Google-игра-сервис не самый новый .

Если ваш проект не поддерживает некоторый класс в .jar, эта ошибка возникает (напр. ImageView.setLayerType, AdvertisingIdClient и т.д.).

Ответил 08/01/2015 d 03:27
источник пользователем

голоса
0

Я уверен, что моя причина была иной, чем у вас, но так как это один из лучших хитов при поиске «Android java.lang.VerifyError», я думал, что записать его здесь для потомства.

У меня были некоторые классы по линиям:

public class A { ... }
public class B extends A { ... }
public class C extends A { ... }

И метод, который сделал:

A[] result = null;
if (something)
    result = new B[cursor.getCount()];
else
    result = new C[cursor.getCount()];

// Fill result
...

Пока этот код присутствует в файле, я хотел бы получить VerifyError в первый раз был загружен класс, содержащий этот метод. Разделение его на два отдельных методов (тот, который имел дело только с Б, и один, что дело только с С-х) зафиксировал проблему.

Ответил 15/07/2013 d 22:04
источник пользователем

голоса
0

Я должен был удалить зависимые проекты и вместо того, чтобы компилировать зависимые проекты банка, среди них в папке Libs.

Ответил 07/11/2012 d 16:58
источник пользователем

голоса
0

Для потомков, я только что получил эту ошибку , потому что я использовал , Arrays.copyOf()который не метод поддерживается Java 1.5 , что соответствует Android Level 4. Поскольку я работала в том числе библиотек , разработанных в рамках 1,6 они составлены в порядке. Я видел только проблемы , когда я переехал соответствующий класс к моему Android проекта - тогда была выделена ошибка.

Uncaught handler: thread main exiting due to uncaught exception
java.lang.VerifyError: com.j256.ormlite.dao.BaseDaoImpl$DaoConfigArray
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:71)
  at com.j256.ormlite.dao.BaseDaoImpl$1.initialValue(BaseDaoImpl.java:1)
  at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:429)
  at java.lang.ThreadLocal.get(ThreadLocal.java:66)

На этой линии я пытался сделать new DaoConfigArrayи что класс имел следующую строку:

// copyOf is only supported in Java >= 1.6
doArray = Arrays.copyOf(daoArray, newLength);

Что сделало его еще более сложным является то , что линия 71 указывал на ThreadLocalинициализацию , которую я считал причиной этой проблемы на начальном этапе.

private static final ThreadLocal<DaoConfigArray> daoConfigLevelLocal
    = new ThreadLocal<DaoConfigArray>() {
    @Override
    protected DaoConfigArray initialValue() {
        return new DaoConfigArray();
    }
};
Ответил 15/04/2012 d 21:53
источник пользователем

голоса
0

Я закодирован Android методы API / класс, которые в SDK 2.1, и пытается запустить его на Android 1.6 эмулятора. Таким образом, я получил эту ошибку.

РЕШЕНИЕ: Изменено это исправить эмулятор версии.

ЭТО РАБОТАЛ ДЛЯ МЕНЯ .. Спасибо.

Ответил 08/02/2011 d 20:24
источник пользователем

голоса
0

Я также имел эту проблему, так как у меня были банки в пользовательской библиотеке ...

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

В первый раз я сделал это он не работал, но потом я снял их и снова readded их и начал работать ...

немного странно! но сейчас работает все время.

Удачи

Ответил 26/01/2011 d 16:00
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more