Ошибка основной библиотеки Android - PullRequest
20 голосов
/ 08 мая 2009

Когда я включаю jaxp.jar, я получаю следующую ошибку-

trouble processing "javax/xml/XMLConstants.class":
[2009-05-08 16:53:18 - TestProject] 
Attempt to include a core VM class in something other than a core library.
It is likely that you have attempted to include the core library from a desktop
virtual machine into an application, which will most assuredly not work. If
you really intend to build a core library -- which is only appropriate as
part of creating a full virtual machine binary, as opposed to compiling an
application -- then use the "--core-library" option to suppress this error
message. If you go ahead and use "--core-library" but are in fact building
an application, then please be aware that your build will still fail at some
point; you will simply be denied the pleasure of reading this helpful error
message.
[2009-05-08 16:53:18 - TestProject] 1 error; aborting
[2009-05-08 16:53:18 - TestProject] Conversion to Dalvik format failed with error 1

Кто-нибудь сталкивался с этой проблемой? Буду очень признателен за любую помощь. Я пошел с некоторыми решениями, но они не являются конкретными.

Ответы [ 5 ]

15 голосов
/ 19 июня 2012

ошибка, которую вы получаете от Dx, основана только на именах пакетов java импортируемых библиотек и ничего больше.

сообщение может быть суммировано как: если вы импортируете библиотеку в пространство имен java.* или javax.*, очень вероятно, что оно зависит от других "базовых" библиотек, которые предоставляются только как часть JDK и, следовательно, не будет доступен на платформе Android. по сути, это мешает вам делать глупости, что верно в 99% случаев, когда вы видите это сообщение.

теперь, конечно, просто потому, что пакет java начинается с java.* или javax.*, не обязательно означает, что он зависит от самого JDK. это может прекрасно работать в Android. чтобы обойти проверку глупости, добавьте опцию --core-library в dx. изменить последнюю строку $ANDROID_HOME/platform-tools/dx с,

exec java $javaOpts -jar "$jarpath" "$@"

до

exec java $javaOpts -jar "$jarpath" --core-library "$@"

в моем случае я включал библиотеку, которая зависела от Джексона, которая зависит от JAXB. для меня переопределение проверки на глупость было приемлемым, потому что библиотека использовала Джексона только для JSON, а не для XML-сериализации (я включаю только библиотеку API JAXB, а не impl). конечно, мне хотелось бы, чтобы был более понятный способ, но переписать библиотеку верхнего уровня, чтобы избежать использования Джексона, было невозможно.

4 голосов
/ 15 декабря 2009

Я вижу две возможности:

В папке вашего проекта файл .classpath может быть неправильным. Попробуйте заменить его на:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Если это не работает, это означает, что библиотека, которую вы пытаетесь включить, не совместима с Android.

3 голосов
/ 27 февраля 2010

Если вы , включая базовый класс, эта ошибка не требует пояснений. Если это не так (ищите ваш код, просто чтобы убедиться), то я видел эту ошибку время от времени только при использовании Eclipse, когда «библиотека» Android добавляется в путь сборки Eclipse несколько раз при аварии.

Я не знаю, как это происходит в этом состоянии, но теперь это случилось со мной дважды. Чтобы решить эту проблему, вам нужно исправить файл .classpath, как заметил Николас. Другой способ сделать это - отредактировать «Путь сборки Java» (щелкнуть правой кнопкой мыши по проекту и выбрать свойства) и удалить библиотеки Android * (если их несколько).

Это приведет к сбоям при компиляции проекта и появлению множества ошибок, но, как только вы убедитесь, что избавились от всех библиотек, вы можете снова щелкнуть правой кнопкой мыши проект и выбрать «Инструменты Android» -> «Исправить проект» Свойства "и правильная (единственная копия) Android.jar будут добавлены обратно, и с этого момента все должно работать нормально.

1 голос
/ 10 февраля 2011

Я получил это после вставки копии проекта Android в ту же рабочую область. Удаление этого с диска впоследствии было недостаточно, потому что Eclipse все еще скрывал некоторые ссылки на него. Мне также пришлось удалить следующую папку в папке рабочей области:

.metadata \ .plugins \ org.eclipse.core.resources.projects [NameOfTheDuplicateProject]

0 голосов
/ 11 января 2010

Я не включаю базовый класс, не собираю базовую библиотеку или что-то подобное.

да, вы:

обработка ошибок "javax / xml / XMLConstants.class"

java. * И javax. * Оба рассчитывают. Вы можете использовать ключ --core-library, если вы просто хотите проигнорировать это в тестовом приложении, но примите во внимание предупреждение: «В какой-то момент ваше приложение все равно не сможет быть построено или запущено. Пожалуйста, будьте готовы к злым клиентам, которые находят Например, что ваше приложение перестает функционировать после обновления операционной системы. Вы будете виноваты в этой проблеме. "

правильное решение, как говорится, для приложения доставки, заключается в том, чтобы переупаковать эти классы (т.е. переместить их в новый каталог, соответственно отредактировать их строки «пакета» и обновить строки «импорта» в вызывающих программах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...