Ошибка основной библиотеки Android

Когда я включаю 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 ответов

Ошибка, которую вы получаете от 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-сериализации (я включаю только библиотеку JAXB API, а не impl). Конечно, я бы хотел, чтобы был более понятный способ, но переписать библиотеку верхнего уровня, чтобы избежать использования Джексона, было невозможно.

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

В папке вашего проекта, файл .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.

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

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

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

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

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

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

Да, вы:

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

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

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

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