Ошибка 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. (без возврата).