Переупаковка.jar файла

Мне нужно добавить несколько jar из библиотеки JRE7 в мой проект Android. Но например rt.jar находится в конфликте с android.jar из Adroid 2.2 SDK, поэтому я получаю эту ошибку:

Неправильное или ошибочное использование базового класса (java.* Или javax.*), Когда не создается базовая библиотека.

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

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

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

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

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

Я знаю, что было несколько тем об этом, и такие вещи, как JarJar, OneJar или FatJar могут быть полезны для меня. Но я не знаю, как заставить кого-то из них работать, и документация не совсем понятна (для меня). Я предполагаю, что они используют команды Ant, но я всегда использовал встроенный компоновщик Eclipse, и теперь я не знаю, как использовать ни Ant, ни что-либо из перечисленного выше.

Итак, мой вопрос: как мне упаковать этот rt.jar, чтобы я мог скомпилировать его в своем проекте Android?

Спасибо!

РЕДАКТИРОВАТЬ:

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

3 ответа

Решение

Было бы неправильно делать это в любом проекте, даже если бы это было возможно. Вы бы открыли себя для множества классовых несовместимостей и проблем с загрузкой. Но в любом случае это даже не имеет значения, потому что основные библиотеки Java загружаются задолго до того, как ваши архивы даже затрагиваются, что делает любую такую ​​попытку переопределить их спорными.

Не говоря уже о том, что Android использует собственную реализацию JVM, которая не полностью совместима с JDK 6 (забудьте JDK 7). Также обратите внимание, что это может быть нарушение авторских прав для упаковки основных библиотек Java с вашим кодом и может изменить ваши параметры лицензирования (IANAL).

Вам нужно найти другой способ решения любой проблемы, которую вы испытываете (которую вы не упомянули в своем вопросе).

Существует множество JAR-файлов, которые прекрасно работают как на Android, так и на классической Java. Ни один из них не связан с пиратством разработчиков Android rt.jar, Придерживаться java.* а также javax.* классы, которые существуют как в Android SDK, так и на любом уровне Java, который вы поддерживаете, и ваш JAR будет отлично работать в обеих средах.

В идеале вы должны воздерживаться от использования таких файлов.jar, но при необходимости вы можете добавить их в путь сборки. Но иногда это приводит к конфликту, подобному тому, с которым вы столкнулись прямо сейчас. Что вам нужно сделать, чтобы разрешить конфликт такого рода:

  1. добавьте банку в путь сборки.
  2. Проверьте "ссылки библиотеки". Файл jar должен отображаться под тем же.
  3. как только он появится в ссылочных библиотеках, проверьте виртуальный каталог "android зависимостей". Если вы увидите, что у вас есть экземпляр того же jar-файла, вам следует полностью удалить папку "android dependencies". (Поверьте мне, это никак не повлияет на ваш проект).
  4. Сделав это, вы сможете скомпилировать свой код без каких-либо дальнейших конфликтов.

Удачного кодирования..:)

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