Ошибка основной библиотеки 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, если вы просто хотите проигнорировать это в тестовом приложении, но примите к сведению предупреждение: "в какой-то момент ваше приложение все равно не удастся построить или запустить. Пожалуйста, будьте готовы к злым клиентам, которые находят Например, что ваше приложение перестает функционировать после обновления операционной системы. Вы будете виноваты в этой проблеме ".
правильное решение, как говорится, для приложения доставки, состоит в том, чтобы переупаковать эти классы (т.е. переместить их в новый каталог, соответственно отредактировать их строки "пакета" и обновить строки "импорта" в их вызывающих программах).