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


238

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

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

Бібліотека арки включена в один із посилань на проект бібліотеки (у папці 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 і бібліотеки] зайшов у всі свої бібліотечні проекти та позначив" Експорт приватних бібліотек "як експортований?" - це "неправильно", оскільки це помилка, визнана людьми, які писали інструменти. "Можливо, ми повинні додати будь-які відсутні файли jar безпосередньо до нашої папки" libs ". Ой, вам це потрібно зробити, як і за останній рік та зміни. Однак ви все одно маєте встановити цей прапорець.
CommonsWare

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

10

Проста перевірка приватних бібліотек Android була недостатньою, мені також довелося встановити Android SDK Build-інструменти в Android SDK Manager.


Я не можу підтвердити, що це потрібно, але я не оминув помилку, з якою стикався SimonSays перед його встановленням. Може знадобитися лише правильне встановлення прапорців для експорту, як описано вище, але відчуваю, що я повинен зазначити, що я робив по ходу установки інструментів збирання.
дивний

це працює для мене. лише зміни параметрів затемнення недостатньо. Можливо, вам доведеться перевірити встановлені інструменти збірки в менеджері SDK для android.
Стівенс

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 просто мовчки ігнорує будь-які зміни залежностей бібліотеки, коли я це роблю в графічному інтерфейсі!


3

У мене була така ж проблема. Це було через проект затемнення. Для її вирішення я створив новий проект у затемненні, скопіювавши в нього свої існуючі класи та ресурси, а потім знову запустив затемнення та додав, що мої користувальницькі включені.


1
Занадто багато клопоту, рішення CommonsWare працювало на мене, і я вважаю, що воно працювало б і для вас.
Більтон

2

У мене було подібне питання, і моя відповідь дещо відрізняється від питання CommonsWare. Ось мій скріншот:

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

Після перевірки мочки назад у моїй збірці знову почала працювати.


2
Я був би обережний з цим рішенням. Android Dependenciesйого замінили Android Private Librariesі, можливо, все ще є там із застарілих причин. Я здогадуюсь, його можна буде зняти будь-коли.
SimonSays

0

У мене була така ж проблема,

i) додати gson lib як бібліотеки референдуму.
ii) перевірити його у java Build Path http://i.stack.imgur.com/Gldhs.png

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.