Обновлены SDK Tools и ADT до 17, и теперь они получают VerifyErrors - PullRequest
7 голосов
/ 22 марта 2012

У меня есть проект, который ссылается на два библиотечных проекта. После обновления инструментов ADT и SDK до версия 17 приложение завершает работу, как только оно сталкивается со ссылкой на класс, определенный в одном из проектов библиотеки. Ошибки, такие как:

Unable to resolve superclass of Lcom/my/package/name/MyActivity; (118)
Link of class 'Lcom/my/package/name/MyActivity;' failed
VFY: unable to find class referenced in signature (Lcom/my/package/name/MyActivity;)

и

 FATAL EXCEPTION: main
  java.lang.VerifyError: my/package/name/util/SomeClass
    at my.package.name.App.onCreate(App.java:120)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:969)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3925)
    at android.app.ActivityThread.access$1300(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

(Мой пакет и классы не названы таким образом, просто изменили их для публикации здесь)

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

Ответы [ 3 ]

12 голосов
/ 22 марта 2012

У меня была точно такая же проблема.Поиск этого поста: Как исправить ошибку «NoClassDefFoundError» с помощью ADT 17 избавьте меня от разочарований.

4 голосов
/ 22 марта 2012

Вот так, это было страшно, но я просто пробовал кучу разных вещей, пока это не сработало. Где-то в пределах всего этого это решало это. В моем библиотечном проекте есть несколько jar-файлов, добавленных в папку "lib" и прикрепленных к пути сборки.

Я прочитал эту заметку в журнале изменений: http://tools.android.com/recent/dealingwithdependenciesinandroidprojects об изменениях в библиотеках и зависимостях. Я заметил это:

Проекты имеют исходные папки, а также библиотечный проект и зависимости файла JAR. При отсутствии необходимости в других настройках, кроме добавления библиотечных проектов в качестве зависимости в project.properties, путь к классу проекта автоматически заполняется:

The content of the project’s libs/*.jar
The output of the Library Projects.
The Library Projects’ libs/*.jar

По какой-то причине папка моего библиотечного проекта называлась "lib", а не "libs". Я использовал его таким образом в течение почти двух лет без каких-либо проблем, но я пошел дальше и изменил его на «libs». Затем я обновил проект и выключил флаг «is Library», а затем снова включил его, чтобы убедиться, что он увидел это изменение.

Также, с новыми инструментами, они упоминают, что он обрабатывает включение jar-файлов проекта библиотеки в проект, который ссылается на библиотеку. До этого момента я добавлял фляги библиотечного проекта в ссылочный проект вручную. Поэтому я вошел в ссылочный проект и удалил файлы jar из пути сборки. Я тогда, когда в свойствах проекта и удалил проект библиотеки и повторно добавил его.

Наконец, я заметил, что jar-файл был в папке проекта библиотеки, но не использовался. Это было просто в папке. Я удалил этот файл.

Так что где-то там снова заработало. Я полагаю, что реальным решением было заменить «lib» на «libs», но я хотел убедиться, что упомянул все это на тот случай, если это поможет другим разработчикам испытать страх и панику в своих сердцах. Удачи!

1 голос
/ 27 марта 2012

@ kargi

Как правило, я думаю, что решение здесь и здесь - очень плохая практика.Maven давно решил эту нелепую бизнес-папку с папками, но Maven также не очень эффективно создает Android, поэтому я бы рекомендовал использовать функцию экспорта Eclipse, как я описал здесь .

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