Архивная библиотека Android (aar) vs standard jar
Я читал некоторые статьи о новом принятии Gradle в качестве стандартной системы сборки для приложений Android. Ну, исходя из стандартной разработки Java, я обычно зависел от jar файлы для создания моего проекта. Однако кажется, что Android также aar пакеты, которые эквивалентны dll файлы в ОС Windows, Как упоминалось здесь:
во-первых, вы должны понять, что Android платформа не позволяет использовать "общие библиотеки" на уровне приложений. В" традиционных " платформах языка программирования, C, C++, Java, вы называете это, у нас есть этот механизм совместного использования библиотек времени выполнения. (Например, DLL на Windows, DSO на Unix, Jar на JVM и т. д.). Однако на Android вы не можете этого сделать, если вы не являетесь Google или производителем телефонов (см. сноску 1 ниже). Как разработчик приложений, это может быть фундаментальным ограничением. "Совместное использование" или "повторное использование" кодов как во время сборки, так и во время выполнения очень важная часть практики разработки программного обеспечения. Это довольно сложно (не невозможно, просто сложнее) на Android из-за вышеупомянутых ограничений.
однако у меня есть некоторые сомнения относительно этой концепции. Я имею в виду, когда разработчик должен быть заинтересован в том числе aar зависимости в его приложении? Являются ли эти зависимости затянутыми до минимальной версии SDK?
например, в одном проекте я получаю доступ к COM-порту, который я использую NDK precompiled .так что библиотеки для. Нужно ли создавать aar, если я хочу поделиться этой утилитой?
3 ответов
AAR
файлы больше похожи на Jar
s чем Dll
s по следующей причине:
Dll
s можно совместно использовать в приложениях, где asAAR
S и опарникы упаковано с вашим приложением.
AAR
s против Jar
s:
основное различие между a
Jar
иAAR
ЭтоAAR
с такие ресурсы, какlayouts, drawables
etc. Это делает его намного проще для создания автономного визуального комплектующие. Например, если у вас несколько приложений, которые используют один и тот же экран входа в систему, сJar
s вы могли бы поделитесь классами, но не макетом, стилями и т. д. тебе все равно пришлось дублировать их. СAAR
все упаковано в один аккуратный пакет.
в заключение AAR
s-большой шаг в правильном направлении.
Примечание:
аналогичные попытки были сделаны с apk-lib
s но они теперь устарели как AAR
s много лучше.
утверждение "основное различие между Jar и AAR заключается в том, что AARs включает такие ресурсы, как макеты, чертежи и т. д. " не соответствует спецификации файла JAR и, следовательно, не является правдой. По спецификация файла JAR:
JAR-файл-это формат файла, основанный на популярном формате ZIP-файла и используемый для объединения многих файлов в один. Файл JAR по существу является zip-файлом, который содержит необязательный META-INF справочник.
Как вы можете видеть, нет ограничения контента, которое запрещает включать ресурсы, такие как макеты, чертежи и т. д. в файле JAR. Дополнительные сведения см. В статье 5.3" создание и загрузка " спецификации виртуальной машины Java®.
Итак, по вопросу Android Archive Library (aar) vs standard jar. Ответ зависит от того, какой инструмент сборки вы используете.
Если вы используете Android Studio в качестве инструмента сборки (соответственно как проект организатор) вам определенно лучше использовать *.AAR файлы для обмена инкапсулированных ресурсов между проектами Android. Формат файла AAR является частью сборки Android Studio, и, как это прокомментировано в других комментариях здесь, его пользовательский интерфейс поддерживает формат aar для библиотек Android.
но кроме Android Studio остальной мир не знает, что такое файл AAR (артефакт). Например, если ваша сборка Android основана на Maven, предпочтительным файлом для совместного использования ресурсов будет jar потому что это собственный артефакт проекта java Maven, и нет никаких ограничений, что поместить в стандартный файл jar. Кроме того, есть способ объяснить Maven любой формат файла, включая aar с помощью улучшения жизненного цикла с новым компонентом. Простой пример здесь как создать новый тип упаковки для Maven?
цитата в вопросе не имеет ничего общего с текущей реальностью. Конечно, можно использовать внешние библиотеки в Android, и есть много доступных библиотек. Возможно, они хотели сказать, что каждое приложение должно связывать все библиотеки, которые ему нужны, но повторное использование библиотеки во время сборки (статическая привязка) на самом деле не проблема.
.aar
отличается от .jar
не более .jar
отличается от .zip
. Он имеет определенные понятия о том, какое содержание следует ожидать там, но оба .jar
и .aar
чаще всего содержат скомпилированные классы и их ресурсов. .aar
просто указывает, что библиотека специфична для Android и имеет некоторую ожидаемую структуру, разумную для таких библиотек (ну,.jar
также имеет некоторую ожидаемую структуру).
вид, что .aar поддерживается только Android studio также устарел. Такие библиотеки могут быть развернуты в Maven Central, и такие инструменты, как gradle, могут ссылаться на них с помощью суффикса @aar, для пример:
dependencies {
compile ('io.github.andviane:uncover:2.0.1@aar')
..
}
ссылка этой развертывание Maven central.