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

Ситуация:

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

Фоновая история:

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

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

Вопрос:

Что я должен сделать, чтобы преобразовать этот файл AAR в файл JAR?

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

  • Переименуйте файл .aar.zip и извлеките.
  • Выделенная папка - это проект ADT, который можно импортировать в Eclipse с некоторыми незначительными изменениями (см. ниже)!
  • В извлеченной папке переименуйте содержащийся файл classes.jar в любое удобное для вас (в этом примере myProjectLib.jar) и переместите его в папку lib в извлеченной папке.
  • Теперь, чтобы Eclipse принял его, вам нужно поместить два файла в извлеченный корень папки:
    • .project
    • .classpath
  • Чтобы сделать это, создайте новый Android-фиктивный проект в Eclipse и скопируйте файлы или скопируйте его из существующего проекта Android.
  • Откройте файл .project и найдите тег имени XML и замените его содержимым на myProjectLib (или все, что вы назвали вашим файлом jar выше) и сохраните.
  • Теперь в Eclipse вы можете Файл → Создать → Проект → Проект Android из существующего источника.. и указать на содержимое извлеченной папки.
  • После импорта правой кнопкой мыши по вновь созданному проекту выберите Свойства → Android и установите флажок Есть библиотека.
  • В своем основном проекте, который вы хотите использовать для библиотеки, также перейдите в Свойства → Android и добавьте недавно добавленный myProjectLib в список зависимостей.

Ответ 4

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

  • Ищет все *.aar файлы и извлекает из них classes.jar
  • Переименовывает извлеченные классы .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`' \;
    

Что это!

Ответ 5

 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 файл.

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

Ответ 6

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

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

Просто следуйте этим шагам:

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

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

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

access .jar from .aar

Ответ 7

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

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

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

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

  • Еще одним подходом может быть просто клонирование всего желаемого проекта как источник от git и импортировать его как "Существующий проект Android"

Ответ 8

Если вы используете Gradle для своих сборок - есть плагин Gradle, который позволяет вам добавить aar-зависимость в ваши java | kotlin | scala |... модули.

https://github.com/stepango/aar2jar

plugins {
    id 'java'
    id 'com.stepango.aar2jar' version "0.6" // <- this one
}

dependencies {
    compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}