Как конвертировать AAR в JAR

Ситуация :

Я намерен использовать библиотеку Java, и у меня есть только файл AAR из репозитория Maven, но мне нужен файл JAR .

История вопроса:

Я попытался скомпилировать библиотеку, но ее структура Gradle была нестабильной. Поэтому я попросил скомпилированный файл jar, и его разработчик передал мне aar-файл из некоторого репозитория Maven (разработчик не смог скомпилировать свой собственный проект). Конфигурация Gradle была беспорядочной, она зависела от нескольких библиотек, а Gradle выбрала некоторые исключения.

Я пытался использовать его в IDEA IDE, но он не мог его увидеть. Проект библиотеки должен быть скомпилирован в файл jar, не так ли?

Вопрос :

Что мне следует сделать для преобразования этого файла AAR в файл JAR?

Файл AAR состоит из файла JAR и некоторых файлов ресурсов (в основном это стандартный zip-файл с пользовательским расширением файла). Вот шаги для преобразования:

  1. Извлеките файл AAR с помощью стандартного zip-экстракт (переименуйте его в * .zip, чтобы упростить его)
  2. Найти файл classes.jar в извлеченных файлах
  3. Переименуйте его, как вам нравится, и используйте этот файл jar в своем проекте.

.aar – стандартный zip-архив, тот же, что и в .jar. Просто измените расширение и, полагая, что оно не повреждено или что-то еще, все должно быть хорошо.

Если вам нужно, вы можете извлечь его в свою файловую систему, а затем переупаковать в банку.

1) Rename it to .jar 2) Extract: jar xf filename.jar 3) Repackage: jar cf output.jar input-file(s) 

Как и многие другие люди, просто извлечение .jar из файла .aar не совсем сокращает его, поскольку ресурсы могут отсутствовать.

Вот шаги, которые сработали для меня (контекст Android, ваш пробег может отличаться, если у вас есть другие цели):

  1. Переименуйте файл .aar .zip и извлеките.
  2. Выделенная папка – это проект ADT, который можно импортировать в Eclipse с некоторыми незначительными изменениями (см. Ниже)!
  3. В извлеченной папке переименуйте содержащийся файл classes.jar в любом месте (в этом примере myProjectLib.jar) и переместите его в папку lib в извлеченной папке.
  4. Теперь, чтобы Eclipse принял его, вам нужно поместить два файла в извлеченный корень папки:
    • .project
    • .classpath
  5. Для этого создайте новый проект для Android в Eclipse и скопируйте файлы или скопируйте его из существующего проекта Android.
  6. Откройте файл .project и найдите тег имени XML и замените его содержимым с помощью myProjectLib (или того, что вы назвали вашим файлом jar выше) и сохраните.
  7. Теперь в Eclipse вы можете File -> New -> Project -> Android Project из существующего источника .. и укажите на содержимое извлеченной папки.
  8. После импорта нажмите правой кнопкой мыши на вновь созданный проект, выберите « Свойства» -> Android и установите флажок « Библиотека» .
  9. В своем основном проекте, который вы хотите использовать для библиотеки, также перейдите в « Свойства -> Android» и добавьте недавно добавленный myProjectLib в список зависимостей.

Для тех, кто хочет сделать это автоматически, я написал небольшой двухстрочный скрипт bash, который выполняет следующие две вещи:

  1. Ищет все * .aar файлы и извлекает из них classes.jar
  2. Переименовывает извлеченные classы.jar как aar, но с новым расширением

     find . -name '*.aar' -exec sh -c 'unzip -d `dirname {}` {} classes.jar' \; find . -name '*.aar' -exec sh -c 'mv `dirname {}`/classes.jar `echo {} | sed s/aar/jar/g`' \; 

Это оно!

  The 'aar' bundle is the binary distribution of an Android Library Project. .aar file consists a JAR file and some resource files. You can convert it as .jar file using this steps 1) Copy the .aar file in a separate folder and Rename the .aar file to .zip file using any winrar or zip Extractor software. 2) Now you will get a .zip file. Right click on the .zip file and select "Extract files". Will get a folder which contains "classes.jar, resource, manifest, R.java, proguard(optional), libs(optional), assets(optional)". 3) Rename the classes.jar file as yourjarfilename.jar and use this in your project. 

Примечание. Если вы хотите получить только .jar-файл из вашего .aar-файла, используйте вышеуказанный способ. Предположим, что если вы хотите включить manifest.xml и ресурсы с вашим .jar-файлом, вы можете просто щелкнуть правой кнопкой мыши по вашему .AAR-файлу и сохранить его как .jar-файл, а не сохранить его как .zip. Чтобы просмотреть файл .jar, который вы извлекли, загрузите JD-GUI (Java Decompiler) . Затем перетащите свой .jar-файл в этот JD_GUI, вы можете увидеть файл .class в читаемых форматах, таких как .java-файл.

введите описание изображения здесь введите описание изображения здесь

Ресурсные проекты .aar

Поиск файла classes.jar внутри файла .aar довольно тривиален. Однако этот подход не работает, если .aar-проект определил некоторые ресурсы (пример: R.layout.xyz)

  • Поэтому deaar от CommonsGuy помог мне получить действительный ADT-дружественный проект из .aar-файла. В моем случае я преобразовал изображение с подвыбором-масштабированием . Мне потребовался час, чтобы настроить ruby на моем ПК.

  • Другой подход – использование Android-maven-plugin для Eclipse / ADT, как пишет CommonsGuy в своем блоге .

  • Еще один подход может заключаться в том, чтобы просто клонировать весь желаемый проект в качестве источника от git и импортировать его как «существующий Android-проект»,

Android Studio (версия: 1.3.2) позволяет вам легко получить доступ к .jar внутри .aar.

Бонус: он автоматически декомпилирует classы!

Просто выполните следующие действия:

  1. File > New > New Module > Import .JAR/.AAR Package для импорта .aar в качестве модуля

  2. Добавьте вновь созданный модуль в зависимость от вашего основного проекта (не обязательно, если необходимо)

  3. Щелкните правой кнопкой мыши на “classes.jar”, как показано ниже, и нажмите «Показать в проводнике». Вот ваш .jar.

доступ .jar от .aar

  • Тестирование API Java EE 6
  • Как получить высоту и ширину изображения с помощью java?
  • Интеграция tomcat и eclipse в качестве среды для быстрого развертывания
  • Использование iTextPDF для обрезки простыни страницы
  • Переопределение переменных-членов в Java
  • Самый простой способ обновить eclipse от 3.7 до 4.2 (Juno)
  • Как обрабатывать всплывающие windows в Selenium WebDriver с помощью Java
  • Самый быстрый способ записи в файл?
  • Настройка hibernate для подключения к базе данных через JNDI Datasource
  • Нужно ли хранить соль с помощью bcrypt?
  • JSP-трюки, чтобы упростить создание шаблонов?
  • Давайте будем гением компьютера.