Ошибка Dalvik VM: Исключение найдено "Javax.xml.namespace.QName.class"
Это не должно быть вопросом. Скорее, наблюдение, которое является общей проблемой, обнаруженной в Android при использовании внешних API для разработки, и android.jar не дублируется в вашем проекте!
Ответы
Ответ 1
После поиска через различные форумы, Google и stackoverflow, я, кажется, получаю решение самостоятельно и думал об обмене его.
-
Всякий раз, когда вы связываете внешние библиотеки, лучше связывайте их, создавая папку /lib и выгружая эти .jars(это означает КОПИРОВАТЬ файлы и НЕ связывать их). Свяжите их с помощью Eclipse → Свойства сборки → Настроить путь сборки → вкладка Библиотека → Добавить внешние банки. Добавьте в него необходимые .jars, сохраненные в папке /lib. (Обратите внимание, что банка, включенная в качестве "Реферированной библиотеки" в Eclipse, исчезнет в папке /lib!. Но не стоит беспокоиться о том, что произошло правильное связывание. Еще одно замечание - проверить, что /lib jar который был указан, НЕ должен быть видимым на вкладке "Библиотеки" свойств сборки, поскольку он будет унаследован.)
-
Еще одна серьезная проблема заключалась в использовании Google API. Особенно те, которые используют некоторые основные библиотечные функции java/javax. Будьте очень осторожны. Ошибка заключается в том, что DalvikVM пытается связать их, но не удается, поскольку обнаружено дублирование и не может решить, к какому из них нужно обратиться. Ниже приведена ошибка.
Dx trouble processing "javax/xml/namespace/QName.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*) when not building a core library.
В таких случаях я заметил, что этот класс используется в xpp3-1.1.4c.jar. Если вы скопировали это в свою /lib папку, ПОЖАЛУЙСТА, УДАЛИТЬ ЭТО. Затем очистите проект и дайте новую сборку. После этого корабль плавно плавает.
Сделайте это для других ссылок .jars, если такое дублирование существует.
Ура!
Ответ 2
Это сработало для меня. Я использую maven, и зависимость xpp3-1.1.4c появляется в разделе "Maven Dependencies"; Я должен был исключить его с помощью (щелкните правой кнопкой мыши на зависимости) Maven- > "Исключить артефакт Maven...". Спасибо, кучка - это было действительно неясно.
Ответ 3
Эта ошибка отображается только при попытке создания подписанного APK.
Есть два способа исправить это.
1. Как прокомментировала Амира Эльсайд Исмаил в этом сообщении this
мы должны вернуться к gradle 2.3.3.
Для этого вы также должны скачать Android Studio 2.3.3, потому что для студии 3.0.1 требуется gradle плагин 3.0 +
Это было первое решение. Но восстановление плагинов Android Studio и gradle - это болезненное решение.
2. Разрешить все конфликты зависимостей.
Когда я вернул gradle, Studio 2.3.3 показала нам интересные предупреждения (я не знаю, почему в студии 3.0.1 не отображаются предупреждения о конфликтах зависимостей)
Warning:WARNING: Dependency xpp3:xpp3:1.1.4c is ignored for debug as it may be conflicting with the internal version provided by Android.
Warning:WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.3 is ignored for debug as it may be conflicting with the internal version provided by Android.
Таким образом, эти зависимости игнорируются для отладки, но НЕ ДЛЯ ОТПУСКА.
Я исправил это, исключив эти зависимости.
configurations {
all*.exclude group: 'xpp3', module: ['xpp3' ,'httpclient']
}
После этого я успешно сгенерировал подписанный APK с помощью gradle 3.0.1. (без возврата).