Опрометчивое или ошибочное использование базового класса (java. * или javax. *) без создания базовой библиотеки

#dalvik

#dalvik

Вопрос:

Когда я очищаю свой проект, я получаю следующую ошибку:

 [2011-10-05 13:47:53 - The Basics] Dx 
trouble processing "java/nio/CharBuffer.class":

Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
  

Часто это происходит из-за непреднамеренного включения файла базовой библиотеки
в проект вашего приложения при использовании IDE (например,
Eclipse). Если вы уверены, что не намеренно определяете
базовый класс, то это наиболее вероятное объяснение того, что
происходит.

Однако на самом деле вы можете пытаться определить класс в пространстве имен core, источник которого вы могли взять, например, из проекта виртуальной машины, отличной от Android. Это, безусловно, не сработает. Как минимум, это ставит под угрозу совместимость вашего приложения с будущими версиями платформы. Это также часто вызывает сомнения в законности.

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

Если вы продолжаете использовать «—core-library», но на самом деле создаете приложение, то имейте в виду, что ваше приложение все равно не сможет быть создано или запущено в какой-то момент. Пожалуйста, будьте готовы к недовольным клиентам, которые обнаружат, например, что ваше приложение перестает функционировать после обновления их операционной системы. Вы будете виноваты в этой проблеме.

Если вы законно используете какой-то код, который случайно находится в пакете core, то самая простая безопасная альтернатива, которая у вас есть, — это переупаковать этот код. То есть переместите рассматриваемые классы в ваше собственное пространство имен пакетов. Это означает, что они никогда не будут конфликтовать с основными системными классами. JarJar — это инструмент, который может помочь вам в этом начинании. Если вы обнаружите, что не можете этого сделать, то это признак того, что путь, по которому вы идете, в конечном итоге приведет к боли, страданиям, горю и скорби.

 [2011-10-05 13:47:53 - The Basics] Dx 1 error; aborting
[2011-10-05 13:47:53 - The Basics] Conversion to Dalvik format failed with error 1
  

Ответ №1:

У меня была эта проблема. Я использую Maven для создания своих проектов Android. Моя проблема была вызвана одной из моих зависимостей, зависящих от Android jars. Я обновил свой pom, чтобы исключить Android из этой зависимости, и это решило проблему для меня.

   <dependency>
        <groupId>org.reassembler</groupId>
        <artifactId>synth-android</artifactId>
        <version>2.5.8</version>
        <exclusions>
            <exclusion>
                <artifactId>junit</artifactId>
                <groupId>junit</groupId>
            </exclusion>
            <exclusion>
                <artifactId>android</artifactId>
                <groupId>android</groupId>
            </exclusion>
        </exclusions>
    </dependency>
  

Надеюсь, это кому-то поможет, мне потребовалось некоторое время, чтобы понять, что происходит.

Комментарии:

1. Спасибо за этот ответ… JUnit был причиной ошибки для меня.

Ответ №2:

В интересах всех, кто, возможно, наткнулся на это, эта проблема может быть вызвана включением более старой библиотеки, такой как android.jar . Удаление .jar файла из вашего пути сборки позволит вам выполнить компиляцию. В противном случае вы можете использовать «jarjar», упомянутый в сообщении об ошибке, для перемещения .jar файла в другой пакет.

Комментарии:

1. в двух словах, это правильно. однако вам, возможно, придется предпринять пару дополнительных шагов. ПРОТИВ! 🙂

Ответ №3:

Ваша IDE неправильно сконфигурирована. Убедитесь, что ваши скрипты или IDE не передают rt.jar или android.jar dx .

Ответ №4:

В Android Studio я включил файлы java и javax jar в свою lib папку, и с ними были связаны зависимости (на build.gradle уровне приложения). Я прокомментировал их.

 //compile files('libs/  K  java-rt-jar-stubs-1.5.0.jar')
//compile 'javax.annotation:jsr250-api:1.0'
//compile files('libs/javax. annotation.jar')
  

Затем я перешел к просмотру проекта и удалил файлы jar. Были некоторые устаревшие экземпляры java.awt.geom, которые мне пришлось удалить, но перестроил проект, и тогда все было в порядке.