Библиотеки больше не добавляются в APK после обновления до ADT 22


238

У меня есть довольно большой проект Android App, который ссылается на несколько библиотечных проектов. Все было хорошо, пока я не обновил плагин eclipse ADT до последней версии (v22). Я также обновил SDK, конечно. Я не вижу никаких ошибок компиляции в Eclipse, но когда я запускаю проект по телефону, я получаю NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

Библиотека arca включена в один из указанных библиотечных проектов (в папке libs), и я вижу ее в «Частных библиотеках Android» в проводнике пакетов, также, как я уже сказал, ошибок компиляции нет. Проект отлично работает на всех остальных компьютерах, которые не обновляли ADT.

Я уже пробовал целый ряд вещей, включая, но не ограничиваясь:

  • переустановите Android SDK
  • скачать свежий комплект ADT
  • удалите весь мой код и получите его снова из git
  • скопировать нужную библиотеку в проект приложения
  • закомментируйте код, который использует эту библиотеку - я просто получаю ту же ошибку для следующей библиотеки

все безуспешно, так что я действительно отчаялся здесь.

Я был бы очень рад, если бы кто-нибудь дал мне подсказку о том, как решить эту проблему.

Ответы:


337

Цитирую улицы Бостона из его поста adt-dev :

При обновлении не всегда проверяется «Заказ и экспорт» новых «Частных библиотек Android». И android-support-v4.jar теперь находится в этом разделе «Частные библиотеки Android».

Чтобы это исправить, перейдите в раздел «Заказ и экспорт» и установите флажок «Частные библиотеки Android». Затем обновите / очистите / восстановите.

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

Дайте этому шанс, и если повезет, это решит вашу проблему.

введите описание изображения здесь


32
CommonsWare, как всегда, один из первых пионеров, большое спасибо! :)
Пол Вайн

1
Каждая новая версия ADT - новый сюрприз;) Надеюсь, новая система сборки будет лучше. Спасибо CommonsWare
lujop

3
Это только я или звучит неправильно, когда каждый разработчик [использующий Eclipse и библиотеки] входит во все свои библиотечные проекты и помечает «Частные библиотеки Android» как «Экспортированные»? Это заставляет меня думать, что мы все ошиблись в намерении Google добавить эту новую "функцию" в первую очередь. Может быть, мы не должны помечать библиотеки как экспортированные. Может быть, мы должны добавить недостающие файлы JAR непосредственно в нашу папку «libs». Пример: Это позволило бы моему библиотечному проекту использовать последнюю версию android-support-v4.jar [v13], в то время как ABS внутренне использует android-support-v4-12.jar.
swooby

2
@swooby: «Это только я или звучит неправильно, когда каждый разработчик [использующий Eclipse и библиотеки] входит во все свои библиотечные проекты и помечает« Частные библиотеки Android »как экспортированные?» - это «неправильно», поскольку это ошибка, признанная людьми, написавшими инструменты. «Может быть, мы должны добавить любые отсутствующие файлы JAR непосредственно в нашу папку« libs »» - о, вам тоже нужно это сделать, как и в прошлом году. Тем не менее, вы все равно должны установить этот флажок.
CommonsWare

9
@Phillip: AFAIK, это все проекты. Точнее, я полагаю, что во всех проектах есть что-то libs/, но вы также можете проверить это на все случаи жизни, если вы добавите материал через libs/несколько месяцев и забудете об этом.
CommonsWare

10

Недостаточно просто проверить частные библиотеки Android, мне также пришлось установить инструменты сборки Android SDK в Android SDK Manager.


Я не могу подтвердить, что это требуется, но я не получил ошибку, с которой столкнулся SimonSays перед установкой. Для этого может потребоваться только правильная установка флажков экспорта, как описано выше, но я должен отметить, что по пути я установил Инструменты сборки.
чудак

это работает для меня. недостаточно только изменить настройки eclipse. Возможно, вам придется проверить установленные инструменты сборки в Android SDK Manager.
Стивенс

4

У меня была такая же проблема, и моя adtбыла 22.0.1. И ни одно из вышеуказанных решений не сработало. Далее при добавлении проекта внешней библиотеки в рабочий проект. Я всегда проверяю genпапку рабочего проекта и, если Rесть проект внешней библиотеки (вместе с именем пакета), то экспортируется только проект внешней библиотеки. И на моей genпапке не было никакой packagenameвнешней библиотеки.

Поэтому я проверил project.propertiesфайл, и не было никакой ссылки на внешнюю библиотеку android.library.reference.1=. Поэтому я вручную добавил ссылку на внешнюю библиотеку, хотя и добавил из project->properties->Java Build Path->Projects->Add. Так что ручное редактирование project.propertiesсделало всю работу за меня.

введите описание изображения здесь


1
Я думаю , что это произошло , так как графический интерфейс место для набора android.library.reference.nявляется не java build path , а project-> properties-> Android-> Library-> Add.... Гоча .
n611x007

4

Я столкнулся с подобной проблемой, провел около 3 часов, но ни одно из предложенных здесь решений не помогло ... Наконец-то я нашел источник проблемы: мои файлы проекта и project.properties были доступны только для чтения. Eclipse просто тихо игнорирует любые изменения в библиотечных зависимостях, когда я делаю это в GUI!


3

У меня такая же проблема. Это было из-за проекта затмения. Чтобы решить эту проблему, я создал новый проект в eclipse, скопировал в него существующие классы и ресурсы проекта, а затем снова запустил eclipse и добавил свои пользовательские включения.


1
Слишком много хлопот, решение CommonsWare сработало для меня, и я считаю, что оно сработало бы и для вас.
Bilthon

2

У меня была похожая проблема, и мой ответ немного отличается от ответа CommonsWare. Вот мой скриншот:

введите описание изображения здесь

После проверки libs обратно в моей сборке снова начал работать.


2
Я был бы осторожен с этим решением. Android Dependenciesбыл заменен на Android Private Librariesи может быть только там по наследственным причинам. Я думаю, это может быть удалено в любое время.
SimonSays

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.