Android java.lang.VerifyError? - PullRequest
       27

Android java.lang.VerifyError?

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

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

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

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

Ответы [ 30 ]

0 голосов
/ 07 ноября 2012

Мне пришлось удалить зависимые проекты и вместо этого скомпилировать зависимые проекты в jar и включить их в папку libs.

0 голосов
/ 14 сентября 2015

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

0 голосов
/ 18 августа 2015

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

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

0 голосов
/ 26 января 2011

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

Я решил это, добавив их в папку lib и добавив их в свойствах сборки в eclipse ...

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

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

Удачи

0 голосов
/ 08 января 2015

В моем случае эта ошибка возникает из-за того, что мой google-play-service не самый новый .

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

0 голосов
/ 16 апреля 2012

Для потомков, я только что получил эту ошибку, потому что я использовал 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();
    }
};
0 голосов
/ 08 февраля 2011

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

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

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

0 голосов
/ 12 марта 2016

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

compileSdkVersion 21
buildToolsVersion '19.1.0'

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

compileSdkVersion 21
buildToolsVersion '21.1.2'
0 голосов
/ 26 августа 2016

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

compileSdkVersion 21

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

compileSdkVersion 19

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

0 голосов
/ 16 июля 2013

Я уверен, что моя причина отличалась от вашей, но так как это один из главных хитов при поиске "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 при первой загрузке класса, содержащего этот метод. Разделение его на два отдельных метода (один, который имел дело только с B, а другой - только с C) устранил проблему.

...