Получение "Причины: java.lang.VerifyError:" - PullRequest
5 голосов
/ 06 июня 2011

Я создал приложение для Android, которое используется в качестве библиотеки в другом приложении для Android.Я использовал сторонние фляги в приложении для Android, которое работает как библиотека.Когда я связываю эту библиотеку в своем приложении для Android и запускаю ее, я получаю ошибку проверки при попытке доступа к классу, присутствующему в библиотеке.Могу ли я узнать, что проблема блокирует здесь для меня?Любая помощь очень ценится.

Я приложил журнал здесь, и Parser1 - это класс внутри библиотеки.Я получаю сообщение об ошибке в строке при попытке создать объект для класса Parser1.

06-06 10:05:43.742: WARN/dalvikvm(224): VFY: unable to resolve static method 3084: Lorg/codehaus/jackson/JsonToken;.values ()[Lorg/codehaus/jackson/JsonToken;
06-06 10:05:43.742: DEBUG/dalvikvm(224): VFY: replacing opcode 0x71 at 0x0005
06-06 10:05:43.742: DEBUG/dalvikvm(224): Making a copy of Lcom/support/utils/Parser1;.$SWITCH_TABLE$org$codehaus$jackson$JsonToken code (522 bytes)
06-06 10:05:43.752: WARN/dalvikvm(224): VFY: unable to find class referenced in signature (Lorg/codehaus/jackson/JsonParser;)
06-06 10:05:43.752: INFO/dalvikvm(224): Could not find method org.codehaus.jackson.JsonParser.getCurrentToken, referenced from method com.support.utils.Parser1.addSectionContentData
06-06 10:05:43.761: WARN/dalvikvm(224): VFY: unable to resolve virtual method 3077: Lorg/codehaus/jackson/JsonParser;.getCurrentToken ()Lorg/codehaus/jackson/JsonToken;
06-06 10:05:43.761: DEBUG/dalvikvm(224): VFY: replacing opcode 0x74 at 0x0002
06-06 10:05:43.761: DEBUG/dalvikvm(224): Making a copy of Lcom/support/utils/Parser1;.addSectionContentData code (2421 bytes)
06-06 10:05:43.761: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;)
06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;)
06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to resolve exception class 685 (Lorg/codehaus/jackson/JsonParseException;)
06-06 10:05:43.771: WARN/dalvikvm(224): VFY: unable to find exception handler at addr 0x19b
06-06 10:05:43.771: WARN/dalvikvm(224): VFY:  rejected Lcom/support/utils/Parser1;.addSectionContentData (Lorg/codehaus/jackson/JsonParser;Ljava/util/List;Lcom/support/ModelClasses/SectionContent;Lcom/support/ModelClasses/FeatureInfo;ZZLjava/lang/String;)Ljava/util/List;
06-06 10:05:43.781: WARN/dalvikvm(224): VFY:  rejecting opcode 0x0d at 0x019b
06-06 10:05:43.781: WARN/dalvikvm(224): VFY:  rejected Lcom/support/utils/Parser1;.addSectionContentData (Lorg/codehaus/jackson/JsonParser;Ljava/util/List;Lcom/support/ModelClasses/SectionContent;Lcom/support/ModelClasses/FeatureInfo;ZZLjava/lang/String;)Ljava/util/List;
06-06 10:05:43.781: WARN/dalvikvm(224): Verifier rejected class Lcom/support/utils/Parser1;
06-06 10:05:43.793: WARN/dalvikvm(224): threadid=15: thread exiting with uncaught exception (group=0x4001b188)
06-06 10:05:43.793: ERROR/AndroidRuntime(224): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception
06-06 10:05:43.812: ERROR/AndroidRuntime(224): java.lang.RuntimeException: An error occured while executing doInBackground()
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.lang.Thread.run(Thread.java:1096)
06-06 10:05:43.812: ERROR/AndroidRuntime(224): Caused by: java.lang.VerifyError: com.support.utils.Parser1
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at com.Sample.checkforversioning(Sample.java:652)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at com.Sample$checkVersionThread.doInBackground(Sample.java:682)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at com.Sample$checkVersionThread.doInBackground(Sample.java:1)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-06 10:05:43.812: ERROR/AndroidRuntime(224):     ... 4 more
06-06 10:05:43.832: INFO/Process(52): Sending signal. PID: 224 SIG: 3

Спасибо, Senthil.M

Ответы [ 6 ]

11 голосов
/ 21 мая 2012

В Eclipse перейдите к Project properties -> Java Build Path. Выберите вкладку Order and Export и проверьте свои банки сторонних производителей.

2 голосов
/ 06 июня 2011

Это может быть вызвано тем, что что-то в банке обращается к чему-то в Java, чего нет в Android SDK.Посмотрите в LogCat для исключения, и он может сказать вам, чего не хватает.Если у вас есть источники для стороннего jar, попробуйте включить их прямо в ваш проект;это поможет выявить проблему.

Вам также необходимо запустить файл JAR с помощью инструмента "dx", который поставляется вместе с SDK.

0 голосов
/ 11 октября 2013

Со мной произошла та же ошибка, когда я пытался перехватить исключение SQLDataException на устройстве API v.8, поскольку соответствующий класс не включен в API v.8 (ошибка не возникала в устройствах v.14, где этот класс включен). На самом деле, SQLDataException.class присутствует не только в android.jar API v.8, но и включен в API v.14. Поэтому я заменил исключение SQLDataException на исключение SQLException (чье SQLDataException является подклассом), и теперь мое приложение работает нормально на обоих устройствах API.

0 голосов
/ 06 июня 2013

Удаление всех файлов jar из папки / libs, а затем добавление их снова с последующей очисткой проекта и исправлением его для меня.

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

Если вы получаете VerifyError после создания релизной версии вашего приложения с использованием ProGuard, это может быть связано с некоторой проблемой оптимизации. См. Документацию , в которой по существу предлагается отключить оптимизацию с использованием -dontoptimize.

0 голосов
/ 16 июня 2012

Если вы используете ant, то вы должны добавить все ваши внешние jar-файлы в следующие директории "libs", а также добавить следующую строку в новый файл: ant.properties: jar.libs.dir = ЛИЭС

...