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
ушел