Android Archive Library (aar) против стандартной банки

Я читал несколько статей о новом применении 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-порту, для которого я использую предварительно скомпилированные библиотеки .so для NDK. Нужно ли создавать AAR, если я хочу поделиться этой утилитой?

5 ответов

Решение

AAR файлы больше похожи на Jarс чем Dllпо следующей причине:

DllS могут быть разделены между приложениями, где, как AARS и банки упакованы в ваше приложение.

AARс против Jars:

Основное различие между Jar и AAR в том, что AARs включают ресурсы, такие как layouts, drawables и т.д. Это значительно облегчает создание автономных визуальных компонентов. Например, если у вас есть несколько приложений, которые используют один и тот же экран входа в систему, с JarЕсли вы можете использовать классы, но не макет, стили и т. д., вам все равно придется их дублировать. С AARВсе в одном аккуратном пакете.

В заключение, AARЭто большой шаг в правильном направлении.

Замечания:
Аналогичные попытки были сделаны с apk-libно сейчас они устарели как AARнамного лучше.

Утверждение " Основное различие между JAR и AAR заключается в том, что AAR включают в себя такие ресурсы, как макеты, рисованные объекты и т. Д. ", Не соответствует спецификации файла JAR и, следовательно, не является правдой. Согласно спецификации файла JAR:

JAR-файл - это формат файла, основанный на популярном формате ZIP-файла, который используется для объединения множества файлов в один. JAR-файл - это, по сути, zip-файл, который содержит необязательный каталог META-INF.

Как вы можете видеть, нет никаких ограничений содержимого, которые запрещают включать такие ресурсы, как макеты, рисованные элементы и т. Д. В файл JAR. Для более подробной информации см. Статью 5.3 "Создание и загрузка" спецификации Java® Virtual Machine.

Так что по вопросу Android Archive Library (aar) против стандартного jar. Ответ зависит от того, какой инструмент сборки вы используете.

Если вы используете Android Studio в качестве инструмента сборки (соответственно, в качестве организатора проекта), вам определенно лучше использовать файлы *.aar для совместного использования инкапсулированных ресурсов между проектами Android. Формат файла AAR является частью сборки Android Studio, и, как указано в других комментариях, его пользовательский интерфейс поддерживает формат aar для библиотек Android.

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

JAR против AAR

JAR– Архив Java. Содержит .class, Java-ресурсы

AAR- Архив Android. Содержит classes.jarи другие файлы, связанные с Android, такие как AndroidManifest.xml, R.txt, proguard.txt, папка res (layout, values, drawable) и другие.

Android работает как с файлами, так и с . В качестве библиотеки разработчик обычно используется для обмена ресурсами Android, в противном случае — более легкий и распространенный способ распространения артефакта.

С aarсодержит jarвы можете использовать его [О]

Разница:

Цитата в вопросе не имеет ничего общего с текущей реальностью. Конечно, в Android можно использовать внешние библиотеки, и есть много доступных библиотек. Возможно, они хотели сказать, что каждое приложение должно объединять все необходимые библиотеки, но повторное использование библиотеки во время сборки (статическое связывание) действительно не является проблемой.

.aar отличается от .jar не больше, чем .jar отличается от .zip, У него есть определенные понятия о том, какой контент следует ожидать там, но оба .jar а также .aar чаще всего содержат скомпилированные классы и ресурсы. .aar просто указывает, что библиотека специфична для Android и имеет некоторую ожидаемую структуру, разумную для таких библиотек (ну, .jar также имеет некоторую ожидаемую структуру).

Представление о том, что.aar поддерживается только Android-студией, также не рекомендуется. Такие библиотеки могут быть развернуты в Maven Central, и такие инструменты, как gradle, могут ссылаться на них, используя суффикс @aar, например:

dependencies {
    compile ('io.github.andviane:uncover:2.0.1@aar')
    ..
}  

сослаться на это центральное размещение Maven.

Основное отличие состоит в том, что внутри android aar разделен на jar.

Если ваше приложение будет использоваться только в пользовательском приложении только в студии Android, предпочтительнее использовать aar.

Если вы планируете, чтобы приложение взаимодействовало с c/ C++, скомпилированный файл lib.so предпочтительнее.

Использование jar и aar в зависимости от требований упрощает работу и обеспечивает большую гибкость.

Это насколько я знаю до леденца на палочке Android 5. Новая версия мне неизвестна.

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