Android-SDK r17 разрушает рабочие проекты

Я обновил свой пакет android-sdk от r16 до r17. Я также обновил Eclipse ADT-Plugin.
Мой проект отлично работал с r16 (android-sdk r16 и Eclipse ADT Plugin v16), но теперь приложение не запускается: Classloader не может найти MainActivity. MainActivity - это первое действие, которое запускается (оно правильно объявлено в AndroidManifest).

03-22 15:07:28.984: E/AndroidRuntime(22106): Caused by: java.lang.ClassNotFoundException: my.....MainActivity
03-22 15:07:28.984: E/AndroidRuntime(22106):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
03-22 15:07:28.984: E/AndroidRuntime(22106):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
03-22 15:07:28.984: E/AndroidRuntime(22106):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
03-22 15:07:28.984: E/AndroidRuntime(22106):    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-22 15:07:28.984: E/AndroidRuntime(22106):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871) 

Название пакета 100% справа. Я даже проверил отмеченную версию моего проекта (у меня выпущен проект, и я всегда отмечаю свои версии) и попробовал его: тот же результат.
Что я уже пробовал (я использую Arch Linux):
- удалить инструменты android-sdk + android-sdk-platform (и переустановить их)
- удалить всю папку Android (/opt/android-sdk) и переустановить пакеты, загрузить целевую платформу
- удалить ~/.android
- удалить ~/.eclipse
- переустановите Eclipse ADT-Plugin
- воссоздать виртуальные устройства
- создать новый проект (новый проект работает)
- распакуйте .apk файл и просмотрите скомпилированные классы с помощью dexdump: apk файл содержит MainActivity
- Я прочитал Android-SDK-Release-Notes для чего-то связанного, но ничего не нашел - И, конечно, перестройте проект (чистая + сборка, я даже вручную удаляю папку bin)

Единственное, что действительно работало, - это включить мой ноутбук (все еще android-sdk r16).
Итак... что я делаю неправильно? Это, наверное, что-то простое...

Спасибо!

Ответ 1

Как уже сообщалось здесь и в другом месте, вам необходимо убедиться, что любые сторонние JAR, которые вы используете, живут в libs/, оба в вашем проекте и в любых проектах зависимых библиотек. Попробуйте это и посмотрите, поможет ли она.

Ответ 2

Для тех разработчиков, которые используют прямую конструкцию Ant с настраиваемым build.xml, который имеет переопределенные цели, которые относятся к "jar.libs.ref" , вы должны заметить, что это было заменено, поэтому ваша сборка завершится неудачно.

Изменение этого параметра на "project.libraries.jars" работало для моих целей, но вы, вероятно, должны проверить различия между предыдущими sdk/tools/ ant/build.xml и новым, Всегда стоит взять копию этого файла перед обновлением инструментов SDK, так как сборки Ant довольно часто прерываются процессом обновления.

Ответ 3

Иногда при закрытии/повторном открытии проекта перезапуск eclipse необходим, чтобы все работало так, как планировалось и ожидалось. Особенно, если вы обновили какой-либо компонент. Но, конечно, поскольку CommonsWare упомянула, что настройка папки библиотеки обязательна.

Ответ 5

Если вы не используете Maven здесь, это подробное руководство с фотографиями, например, упомянутое в CommonsWare.

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

Но если вы используете зависимости Maven, они не включены в проект библиотеки. Коннектор m2e-android все еще не знает, как с этим справиться, поэтому, если у вас есть проекты Android с Maven, не обновляйтесь до ADT 17.забастовкa >

Была выпущена новая версия версии 0.4.1 для Android Connector для M2E (m2e-android), и исправлена ​​ошибка с проектами Maven. https://github.com/rgladwell/m2e-android/issues/72

Ответ 6

Я сработал по той же ошибке при использовании ADT 18. Было несколько причин, в том числе необходимость переместить мои файлы jar из библиотеки lib в папку libs. Кстати, я использовал новую рабочую станцию ​​с установленным JDK 7. Мне потребовалось несколько часов, чтобы понять, что шаг сборки dex отклонил скомпилированные файлы классов из одного из файлов jar, которые я построил отдельно, потому что подпись класса неприемлема. Ошибка, указанная на этапе сборки dex, была "Обработка неполадок: магия файла с малым классом (cafebabe) или версия (0033.0000)"

Мой файл jar состоит из чистого кода Java, который я создаю с помощью ant. Сокращая длинный рассказ, я, наконец, сумел заставить все работать, как только я установил Java 6 JDK, добавил путь к папке bin JDK 6 в качестве первого элемента в своем указателе пути, а затем перестроил файл jar. Тогда я смог использовать файл jar в своем Android-проекте. Шаг сборки dex не отклонял классы из файла jar, и поэтому мое приложение запускалось на устройстве, а не с ошибкой ClassNotFoundException.

Я обнаружил несколько полезных советов: - Запустите ant с параметром командной строки -v и тщательно изучите вывод. Вот как я знал, что компилятор java6 использовался в конце всех моих изменений. Аналогичным образом, когда я построил приложение для Android с помощью ant, на этапе dex было достаточно деталей, чтобы сообщить мне, какие файлы jar обрабатываются и т.д.

Аналогично в Eclipse я включил подробный уровень ведения журнала для вывода сборки Android. Настройки > Android > Сборкa > Сборка выводa > Подробный

Выход adb logcat фактически сообщает о недостающих файлах класса при загрузке приложения. Если вы используете представление LogCat в Eclipse, соответствующие строки находятся в красном тексте и легко отображаются, как только вы знаете, что они существуют.

Я надеюсь, что это поможет другим в подобном затруднительном положении с тем, в котором я оказался, - где я создал свои собственные чистые java файлы. Изменено несколько факторов, включая версию Java SDK и инструменты ADT, и диагностика различных причин была проблемой.