NoClassDefFoundError с Mapsforge 0.4.0 и Eclipse

Я пытаюсь добавить вид карты в свое приложение, используя Mapsforge. Я сделал следующее:

  • Загруженные файлы jar и помещенные в libs/ папка
    • mapsforge-ядро-0.4.0.jar
    • mapsforge-карта-0.4.0.jar
    • mapsforge-карта-андроид-0.4.0.jar
    • mapsforge-карта-читатель-0.4.0.jar
  • Щелкните файл правой кнопкой мыши и выберите "Путь сборки"> "Добавить в путь сборки".
  • В свойствах проекта помечены четыре банки как экспортированные.

Однако, когда я запускаю свое приложение, оно падает при первом вызове класса из библиотеки:

E/AndroidRuntime(21265): java.lang.NoClassDefFoundError: org.mapsforge.map.android.graphics.AndroidGraphicFactory

Android SDK инструменты выше версии 17. Никаких Maven не участвует.

Я искал ответ, но безрезультатно. Я попытался переместить банки вверх по списку, очистить проект - это и то, что я уже сделал, это суть того, что предлагается в сети. Ничего не помогло

Когда я проверяю содержимое bin / dexedLibs, я замечаю, что jar для mapsforge были созданы, но практически пусты, за исключением файла манифеста и (в случае jar maps) ресурсов osmarender. Примечательно, что файл classes.dex отсутствует. Библиотека поддержки Android в этой папке содержит файл classes.dex.

Есть какие-нибудь подсказки?

РЕДАКТИРОВАТЬ: Я проверил оригинальные файлы JAR. Глядя на файлы.class, я заметил, что каждый из них начинается с CA FE BA BE 00 00 00 33в формате Java 7

Согласно некоторым сведениям, найденным в сети, Java 7 не поддерживается Android SDK. Это все еще так? Это объяснило бы, почему ничего не работает, но заставило бы меня задуматься, почему разработчики Mapsforge используют Java 7 для компиляции jar, который будет использоваться с Android...

2 ответа

Решение

NoClassDefFound - действительно сложное Исключение, которое можно решить, обходной путь, который вы можете попробовать.

workaroud: Java Build Path -> Oeder и Export -> сделайте sur 3rd.jar выше yourPath/src

Я знаю поддержку Android java7, только когда вы используете версию выше 19.

@Ninja указал мне правильное направление, но я опубликую подробные шаги здесь.

Краткий ответ: вам нужна версия 19 или выше набора инструментов Android, так как в этой версии была представлена ​​поддержка Java 7, необходимая для сборки с использованием готовых библиотек Mapsforge 0.4.0.

Как обновить:

  • Запустите ADT. Обновите все установленные пакеты и дополнительно выберите хотя бы одну версию Android SDK Build-tools, 19 или выше. (У вас может быть несколько версий инструментов сборки Android SDK, установленных рядом друг с другом.)
  • Теперь откройте Eclipse и выберите " Справка"> "Проверить наличие обновлений" в меню.
    • Если вы получили сообщение об ошибке, что источники программного обеспечения недоступны, выберите "Справка"> "Установить новое программное обеспечение". В диалоговом окне нажмите кнопку " Добавить" и добавьте новый репозиторий с именем " Плагин ADT", URL https://dl-ssl.google.com/android/eclipse/. Затем повторите попытку.
  • Перезапустите Eclipse, когда будет предложено это сделать.
  • Установка уровня соответствия компилятору в моем случае оказалась необязательной (я оставил его на уровне 1.6).

С этими шагами мой проект Mapsforge работает - я могу отобразить карту и NoClassDefFoundError ушел

Другие вопросы по тегам