Как конвертировать AAR в JAR
Ситуация:
Я намереваюсь использовать библиотеку Java, и у меня есть только файл AAR из репозитория Maven, но мне нужен файл JAR.
Фоновая история:
Я пытался скомпилировать библиотеку, но ее структура Gradle была нестабильной. Поэтому я попросил скомпилированный jar-файл, и его разработчик передал мне aar-файл из какого-то репозитория Maven (разработчик не смог скомпилировать свой собственный проект). Конфигурация Gradle была беспорядочной, она зависела от нескольких библиотек, и Gradle выдал некоторые исключения.
Я пытался использовать его в моей IDEA IDE, но он не мог видеть это. Библиотечный проект должен быть в состоянии скомпилировать в JAR-файл, верно?
Вопрос:
Что я должен сделать, чтобы преобразовать этот файл AAR в файл JAR?
7 ответов
Файл AAR состоит из файла JAR и некоторых файлов ресурсов (в основном это стандартный zip-файл с пользовательским расширением файла). Вот шаги для преобразования:
- Извлеките файл AAR, используя стандартный экстракт zip (переименуйте его в *.zip, чтобы упростить его)
- Найдите файл classes.jar в извлеченных файлах
- Переименуйте его, как вам нравится, и используйте этот 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, ваш пробег может отличаться, если у вас есть другие цели):
- Переименуйте файл.aar в.zip и распакуйте.
- Извлеченная папка является проектом ADT, который вы можете импортировать в Eclipse с некоторыми незначительными изменениями (см. Ниже)!
- В извлеченной папке переименуйте содержащийся файл classes.jar во что угодно (в этом примере myProjectLib.jar) и переместите его в папку lib внутри извлеченной папки.
- Теперь, чтобы Eclipse принял его, вам нужно поместить два файла в извлеченный корневой каталог:
- .project
- .classpath
- Для этого в Eclipse создайте новый фиктивный проект Android и скопируйте файлы или скопируйте из существующего проекта Android.
- Откройте файл.project, найдите тег имени XML, замените его содержимое на myProjectLib (или как вы назвали свой jar-файл выше) и сохраните.
- Теперь в Eclipse вы можете File -> New -> Project -> Android Project из существующего источника.. и указать на извлеченное содержимое папки.
- После импорта щелкните правой кнопкой мыши вновь созданный проект, выберите " Свойства" -> "Android" и установите флажок " Библиотека".
- В вашем основном проекте, для которого вы хотите использовать библиотеку, также перейдите в Свойства -> Android и добавьте вновь добавленную myProjectLib в список зависимостей.
Для тех, кто хочет сделать это автоматически, я написал небольшой двухстрочный bash-скрипт, который выполняет следующие две вещи:
- Ищет все *.aar файлы и извлекает из них classes.jar
Переименовывает извлеченные classes.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`' \;
Это оно!
Android Studio (версия: 1.3.2) позволяет вам легко получить доступ к.jar внутри.aar.
Бонус: он автоматически декомпилирует классы!
Просто выполните следующие действия:
File > New > New Module > Import .JAR/.AAR Package
импортировать вас.aar в качестве модуляДобавьте вновь созданный модуль в качестве зависимости к основному проекту (не уверен, если это необходимо)
Щелкните правой кнопкой мыши "classes.jar", как показано на снимке ниже, и нажмите "Показать в проводнике". Вот твой.jar.
Ресурсные.aar-проекты
Найти файл classes.jar внутри файла.aar довольно тривиально. Однако этот подход не работает, если.aar-проект определил некоторые ресурсы (пример: R.layout.xyz)
Поэтому deaar из CommonsGuy помог мне получить действительный ADT-дружественный проект из.aar-файла. В моем случае я конвертировал масштабирование изображения сэмплирования. Мне потребовалось около часа, чтобы настроить Ruby на моем компьютере.
Другой подход заключается в использовании android-maven-plugin для Eclipse/ADT, как пишет CommonsGuy в своем блоге.
Еще один подход может быть, просто клонировать весь желаемый проект как источник из git и импортировать его как "Существующий проект Android"
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.
Если вы используете Gradle для своих сборок - есть плагин Gradle, который позволяет вам добавить aar-зависимость в ваши java|kotlin|scala|... модули.
https://github.com/stepango/aar2jar
plugins {
id 'java'
id 'com.stepango.aar2jar' version “0.4” // <- this one
}
dependencies {
compileOnlyAar "com.android.support:support-annotations:28.0.0" // <- Use any AAR dependencies
}