Подтвердить что ты не робот

Ошибка базовой библиотеки 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

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

4b9b3361

Ответ 1

ошибка, которую вы получаете от 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" "[email protected]"

в

exec java $javaOpts -jar "$jarpath" --core-library "[email protected]"

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

Ответ 2

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

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

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

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

Это приведет к тому, что проект не сможет скомпилировать и иметь много ошибок, но после того, как вы уверены, что избавились от всех библиотек, вы можете снова щелкнуть проект и выбрать "Android Tools" → "Fix Project Свойства" и правильная (единственная копия) Android.jar будет добавлена ​​обратно, и оттуда все будет хорошо работать.

Ответ 4

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

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

Ответ 5

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

да, вы:

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

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

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