AAPT2 (Android Asset Packaging Tool) — это инструмент сборки, который Android Studio и плагин Android Gradle используют для компиляции и упаковки ресурсов вашего приложения. AAPT2 анализирует, индексирует и компилирует ресурсы в двоичный формат, оптимизированный для платформы Android.
 Плагин Android Gradle 3.0.0 и выше по умолчанию включает AAPT2. Обычно вам не нужно самостоятельно вызывать aapt2 . Однако если вы предпочитаете использовать свой терминал и собственную систему сборки вместо Android Studio, вы можете использовать AAPT2 из командной строки. Вы также можете отладить ошибки сборки, связанные с AAPT2, из командной строки. Для этого найдите AAPT2 как отдельный инструмент в Android SDK Build Tools 26.0.2 и более поздних версиях.
 Чтобы загрузить инструменты сборки Android SDK из командной строки, используйте sdkmanager и выполните следующую команду:
sdkmanager "build-tools;build-tools-version"
 Загрузив инструменты сборки SDK, найдите AAPT2 в android_sdk /build-tools/ version / .
Поскольку версии инструментов сборки Android SDK выпускаются нечасто, версия AAPT2, включенная в ваши инструменты сборки SDK, может быть не последней. Чтобы получить последнюю версию AAPT2, загрузите AAPT2 из Google Maven .
 Чтобы использовать AAPT2 из командной строки в Linux или Mac, выполните команду aapt2 . В Windows запустите команду aapt2.exe .
AAPT2 поддерживает более быструю компиляцию ресурсов за счет инкрементной компиляции. Для выполнения инкрементной компиляции обработка ресурсов разделена на два этапа:
- Компилировать : компилирует файлы ресурсов в двоичные форматы.
- Ссылка : объединяет все скомпилированные файлы и упаковывает их в один пакет.
Такое разделение помогает повысить производительность инкрементных сборок. Например, если есть изменения в одном файле, вам нужно перекомпилировать только этот файл.
Загрузите AAPT2 из Google Maven
Чтобы получить новейшую версию AAPT2, не включенную в инструменты сборки, загрузите AAPT2 из репозитория Google Maven следующим образом:
- В индексе репозитория перейдите к com.android.tools.build > aapt2 .
- Скопируйте имя последней версии AAPT2.
- Вставьте имя версии, которое вы скопировали, в следующий URL-адрес и укажите целевую операционную систему: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/aapt2-version / aapt2-version aapt2-version . aapt2-version - [windows | linux | osx] .jar - Например, чтобы загрузить версию 3.2.0-alpha18-4804415 для Windows, используйте: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/ 3.2.0-alpha18- 4804415 /aapt2- 3.2.0-alpha18-4804415 - windows.jar 
- Перейдите по URL-адресу в браузере. Загрузка AAPT2 начнется в ближайшее время. 
- Распакуйте только что скачанный JAR-файл. - Файл JAR должен содержать исполняемый файл - aapt2и некоторые библиотеки, от которых зависит этот исполняемый файл.
Скомпилировать
 AAPT2 поддерживает компиляцию всех типов ресурсов Android , таких как графические объекты и XML-файлы. Когда вы вызываете AAPT2 для компиляции, передайте один файл ресурсов в качестве входных данных для каждого вызова. Затем AAPT2 анализирует файл и генерирует промежуточный двоичный файл с расширением .flat .
 При передаче целых каталогов AAPT2 перекомпилирует все файлы в каталоге, даже если изменился только один ресурс. Хотя вы можете передавать в AAPT2 каталоги ресурсов, содержащие более одного файла ресурсов, с помощью флага --dir , таким образом вы не получите преимуществ от инкрементной компиляции ресурсов.
Типы выходных файлов могут различаться в зависимости от входных данных, которые вы предоставляете для компиляции, как показано в следующей таблице:
Таблица 1. Типы входных и выходных файлов для компиляции
| Вход | Выход | 
|---|---|
| Файлы ресурсов XML, такие как String и Style , расположенные в каталоге res/values/ | Таблица ресурсов с расширением *.arsc.flat. | 
| Все остальные файлы ресурсов. |  Все файлы, кроме файлов в каталоге   Кроме того, все файлы PNG по умолчанию сжимаются и имеют расширения  | 
Выходные файлы AAPT2 не являются исполняемыми, и вам придется позже включить эти двоичные файлы в качестве входных данных на этапе компоновки для создания APK. Однако сгенерированный APK-файл не является исполняемым файлом, который можно сразу развернуть на устройстве Android, поскольку он не содержит файлов DEX и не подписан.
Синтаксис компиляции
 Общий синтаксис использования compile следующий:
aapt2 compile path-to-input-files [options] -o output-directory/
 В следующем примере AAPT2 компилирует файлы ресурсов с values.xml и myImage.png по отдельности:
aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/
Как показано в таблице 1, имя выходного файла зависит от имени входного файла и имени его родительского каталога.
 В предыдущем примере с файлом strings.xml в качестве входных данных aapt2 автоматически присваивает выходному файлу имя values-en_strings.arsc.flat . Flat . Однако скомпилированный файл с возможностью рисования, хранящийся в каталоге с возможностью рисования, называется drawable_img.png.flat .
Варианты компиляции
 Есть несколько опций, которые вы можете использовать с командой compile , как показано в таблице 2:
Таблица 2. Параметры команды компиляции
| Вариант | Описание | 
|---|---|
| -o path | Указывает выходной путь для скомпилированных ресурсов. Это обязательный флаг, поскольку вы должны указать путь к каталогу, в котором AAPT2 может выводить и хранить скомпилированные ресурсы. | 
| --dir directory | Указывает каталог для сканирования ресурсов. Хотя вы можете использовать этот флаг для компиляции нескольких файлов ресурсов с помощью одной команды, он отключает преимущества инкрементальной компиляции. Поэтому этот флаг не следует использовать для крупных проектов. | 
| --pseudo-localize | Создает псевдолокализованные версии строк по умолчанию, такие как en-XAиen-XB. | 
| --no-crunch | Отключает обработку PNG. Используйте этот параметр, если вы уже обработали файлы PNG или создаете отладочные сборки, не требующие уменьшения размера файла. Включение этой опции приводит к более быстрому выполнению, но увеличивает размер выходного файла. | 
| --legacy | Ошибки, допустимые при использовании более ранних версий AAPT, рассматриваются как предупреждения. Этот флаг следует использовать в случае непредвиденных ошибок во время компиляции. Чтобы устранить известные изменения в поведении, которые могут возникнуть при использовании AAPT2, прочтите «Изменения поведения при использовании AAPT2» . | 
| -zip file | file представляет собой ZIP-файл, содержащий каталог resдля сканирования ресурсов. | 
| -output-text-symbols file | Создает текстовый файл, содержащий символы ресурсов в указанном | 
| -preserve-visibility-of-styleables | Если указано, применяются те же правила видимости для стилей, которые используются для всех других ресурсов. В противном случае все стили становятся общедоступными. | 
| -visibility [ public | private | default |] | Устанавливает видимость скомпилированных ресурсов на указанный уровень. | 
| -trace-folder folder | Создает фрагмент трассировки JSON systraceдля указанного | 
| -source-path path | Устанавливает путь к исходному файлу скомпилированного файла ресурсов равным | 
| -h | Отображает справку по инструментам. | 
| -v | Включает подробное ведение журнала. | 
Связь
 На этапе компоновки AAPT2 объединяет все промежуточные файлы, созданные на этапе компиляции, такие как таблицы ресурсов, двоичные файлы XML и обработанные файлы PNG, а затем упаковывает файлы в один APK. Кроме того, на этом этапе можно создать другие вспомогательные файлы, такие как файлы правил R.java и ProGuard. Однако сгенерированный APK не содержит байт-кода DEX и не имеет знака. Вы не можете развернуть этот APK на устройстве.
Если вы не используете плагин Android Gradle для создания приложения из командной строки , вы можете использовать другие инструменты командной строки, такие как d8 для компиляции байт-кода Java в байт-код DEX и apksigner для подписи вашего APK.
Синтаксис ссылки
 Общий синтаксис использования link следующий:
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
 В следующем примере AAPT2 объединяет два промежуточных файла: drawable_Image.flat и values_values.arsc.flat Flat, а также файл AndroidManifest.xml . AAPT2 связывает результат с файлом android.jar , который содержит ресурсы, определенные в пакете android :
 aapt2 link -o output.apk
 -I android_sdk/platforms/android_version/android.jar
    compiled/res/values_values.arsc.flat
    compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v
Варианты ссылок
 С командой link вы можете использовать следующие параметры:
Таблица 3. Параметры команды Link
| Вариант | Описание | 
|---|---|
| -o path | Указывает выходной путь для APK связанного ресурса. Это обязательный флаг, поскольку вы должны указать путь к выходному APK, который может содержать связанные ресурсы. | 
| --manifest file | Указывает путь к файлу манифеста Android для сборки. Это обязательный флаг, поскольку файл манифеста содержит важную информацию о вашем приложении, например имя пакета и идентификатор приложения. | 
| -I |  Предоставляет путь к  androidв своих файлах ресурсов. | 
| -A directory | Указывает каталог ресурсов, который будет включен в APK. Вы можете использовать этот каталог для хранения исходных необработанных файлов. Чтобы узнать больше, прочитайте Доступ к исходным файлам . | 
| -R file | Передает отдельный файл .flatвlink, используя семантикуoverlayбез использования тега<add-resource>.Когда вы предоставляете файл ресурсов, который перекрывает существующий файл, используется последний указанный конфликтующий ресурс. | 
| --package-id package-id | Указывает идентификатор пакета, который будет использоваться вашим приложением.  Указанный вами идентификатор пакета должен быть больше или равен 0x7f, если он не используется в сочетании с  | 
| --allow-reserved-package-id | Позволяет использовать зарезервированный идентификатор пакета.  Идентификаторы зарезервированных пакетов — это идентификаторы, которые обычно назначаются общим библиотекам и находятся в диапазоне от 0x02 до 0x7e включительно. Используя   Эту опцию следует использовать только для пакетов с версией  | 
| --java directory | Указывает каталог для создания R.java. | 
| --proguard proguard_options | Создает выходной файл для правил ProGuard. | 
| --proguard-conditional-keep-rules | Создает выходной файл для правил ProGuard для основного DEX. | 
| --no-auto-version | Отключает автоматическое управление версиями SDK стиля и макета. | 
| --no-version-vectors | Отключает автоматическое управление версиями векторных изображений. Используйте этот флаг только при создании APK с помощью библиотеки Vector Drawable. | 
| --no-version-transitions | Отключает автоматическое управление версиями ресурсов перехода. Используйте этот флаг только при создании APK с библиотекой поддержки перехода. | 
| --no-resource-deduping | Отключает автоматическую дедупликацию ресурсов с одинаковыми значениями в совместимых конфигурациях. | 
| --enable-sparse-encoding | Включает кодирование разреженных записей с использованием двоичного дерева поиска. Это полезно для оптимизации размера APK, но за счет производительности поиска ресурсов. | 
| -z | Требуется локализация строк с пометкой «предлагается». | 
| -c config | Предоставляет список конфигураций, разделенных запятыми. Например, если у вас есть зависимости от библиотеки поддержки, которая содержит переводы для нескольких языков, вы можете фильтровать ресурсы только для данной языковой конфигурации, например английского или испанского. Вы должны определить языковую конфигурацию с помощью двухбуквенного кода языка ISO 639-1, за которым, при необходимости, следует двухбуквенный код региона ISO 3166-1-alpha-2, которому предшествует строчная буква «r». Например, ru-ru. | 
| --preferred-density density | Позволяет AAPT2 выбирать наиболее близкую совпадающую плотность и удалять все остальные. В вашем приложении можно использовать несколько квалификаторов плотности пикселей, например ldpi, hdpi и xhdpi. Когда вы указываете предпочтительную плотность, AAPT2 выбирает и сохраняет наиболее подходящую плотность в таблице ресурсов и удаляет все остальные. | 
| --output-to-dir | Выводит содержимое APK в каталог, указанный -o.Если вы получаете какие-либо ошибки при использовании этого флага, вы можете устранить их, обновив Android SDK Build Tools 28.0.0 или более поздней версии . | 
| --min-sdk-version min-sdk-version | Устанавливает минимальную версию SDK по умолчанию, используемую для AndroidManifest.xml. | 
| --target-sdk-version target-sdk-version | Устанавливает целевую версию SDK по умолчанию, которая будет использоваться для AndroidManifest.xml. | 
| --version-code version-code | Указывает код версии для внедрения в AndroidManifest.xmlесли его нет. | 
| --version-name version-name | Указывает имя версии, которое будет добавлено в AndroidManifest.xml, если оно отсутствует. | 
| --revision-code revision-code | Указывает код версии, который нужно добавить в файл AndroidManifest.xml, если его нет. | 
| --replace-version | Если указаны --version-code,--version-nameили--revision-code, эти значения заменяют любое значение, уже содержащееся в манифесте. По умолчанию ничего не меняется, если в манифесте уже определены эти атрибуты. | 
| --compile-sdk-version-nacodeme compile-sdk-version-name | Указывает код версии для вставки в файл AndroidManifest.xml, если его нет. | 
| --compile-sdk-version-name compile-sdk-version-name | Указывает имя версии, которое нужно добавить в файл AndroidManifest.xml, если его нет. | 
| --proto-format | Генерирует скомпилированные ресурсы в формате Protobuf.  Подходит в качестве входных данных для  | 
| --non-final-ids | Генерирует R.javaс неконечными идентификаторами ресурсов. Ссылки на идентификаторы из кода приложения не встраиваются во время компиляцииkotlincилиjavac. | 
| --emit-ids path | Создает файл по заданному пути со списком имен типов ресурсов и сопоставлений их идентификаторов. Это подходит для использования с --stable-ids. | 
| --stable-ids outputfilename.ext | Использует файл, созданный с помощью --emit-ids, содержащий список названий типов ресурсов и назначенных им идентификаторов.Этот параметр позволяет назначенным идентификаторам оставаться стабильными даже при удалении или добавлении новых ресурсов во время связывания. | 
| --custom-package package_name | Указывает пользовательский пакет Java для создания R.java. | 
| --extra-packages package_name | Создает тот же файл R.java, но с другими именами пакетов. | 
| --add-javadoc-annotation annotation | Добавляет аннотацию JavaDoc ко всем созданным классам Java. | 
| --output-text-symbols path | Создает текстовый файл, содержащий символы ресурсов класса Rв указанном файле.Необходимо указать путь к выходному файлу. | 
| --auto-add-overlay | Позволяет добавлять новые ресурсы в наложения без использования тега <add-resource>. | 
| --rename-manifest-package manifest-package | Переименовывает пакет в файле AndroidManifest.xml. | 
| --rename-instrumentation-target-package instrumentation- target-package | Изменяет имя целевого пакета для instrumentation. Эту опцию следует использовать вместе с  | 
| -0 extension | Указывает расширения файлов, которые вы не хотите сжимать. | 
| --split path:config[,config[..]] | Разделяет ресурсы на основе набора конфигураций для создания другой версии APK. Необходимо указать путь к выходному APK вместе с набором конфигураций. | 
| --proguard-main-dex file | Выходной файл для сгенерированных правил ProGuard для основного DEX. | 
| --proguard-minimal-keep-rules | Создает минимальный набор правил хранения ProGuard. | 
| --no-resource-removal | Отключает автоматическое удаление ресурсов без значений по умолчанию. Используйте эту опцию только при создании пакетов наложения ресурсов среды выполнения. | 
| -x | Флаг Legacy, указывающий использование идентификатора пакета 0x01. | 
| --product products-list | Указывает список названий продуктов, разделенных запятыми, которые необходимо сохранить. | 
| --no-xml-namespaces | Удаляет префикс пространства имен XML и информацию URI из файла AndroidManifest.xmlи двоичных файлов XML вres/*. | 
| --shared-lib | Создает общую библиотеку времени выполнения Android. | 
| --static-lib | Создает статическую библиотеку Android. | 
| --no-static-lib-packages | Объединяет все ресурсы библиотеки в пакете приложения. | 
| --no-proguard-location-reference | Предохраняет файлы правил ProGuard от ссылки на исходный файл. | 
| --private-symbols package-name | package-name указывает имя пакета, которое будет использоваться при создании R.javaдля частных символов. Если не указано, общедоступные и частные символы используют имя пакета приложения. | 
| --override-styles-instead-of-overlaying | Заставляет стили, определенные в ресурсах -Rзаменять предыдущие определения вместо их объединения. | 
| --rename-resources-package package-name | Переименовывает пакет в таблице ресурсов на package-name . | 
| --no-compress | Не сжимает ресурсы. | 
| --keep-raw-values | Сохраняет необработанные значения атрибутов в файлах XML. | 
| --no-compress-regex regular-expression | Не сжимает расширения, соответствующие regular-expression . Используйте символ $для конца строки. Использует грамматику регулярных выражений ECMAScript с учетом регистра. | 
| --warn-manifest-validation | Считает ошибки проверки манифеста предупреждениями. | 
| --exclude-configs qualifier[,qualifier[..]] | Исключает значения ресурсов, конфигурации которых содержат указанные квалификаторы. | 
| --debug-mode | Вставляет android:debuggable="true"в узел приложения манифеста, делая приложение доступным для отладки даже на производственных устройствах. | 
| --strict-visibility | Не допускает наложения с разными уровнями видимости. | 
| --exclude-sources | Не сериализует информацию исходного файла при создании ресурсов в формате Protobuf. | 
| --trace-folder folder | Создает фрагмент трассировки JSON systraceв указанную folder . | 
| --merge-only | Только объединяет ресурсы без проверки ссылок на ресурсы. Этот флаг следует использовать только с флагом --static-lib. | 
| -h | Отображает меню помощи. | 
| -v | Включает повышенную детализацию вывода. | 
Свалка
 dump используется для печати информации об APK, созданном вами с помощью команды link .
Синтаксис дампа
 Общий синтаксис использования dump следующий:
aapt2 dump sub-command filename.apk [options]
В следующем примере выводится содержимое из таблицы ресурсов указанного APK:
aapt2 dump resources output.apk
Подкоманды дампа
 Вместе с командой dump укажите одну из следующих подкоманд:
Таблица 4. Подкоманды дампа
| Подкоманда | Описание | 
|---|---|
| apc | Печатает содержимое контейнера AAPT2 (APC), созданного во время компиляции. | 
| badging | Печатает информацию, извлеченную из манифеста APK. | 
| configurations | Печатает каждую конфигурацию, используемую ресурсом в APK. | 
| overlayable | Печатает накладываемые ресурсы APK. | 
| packagename | Печатает имя пакета APK. | 
| permissions | Печатает разрешения, извлеченные из манифеста APK. | 
| strings | Печатает содержимое пула строк таблицы ресурсов APK. | 
| styleparents | Печатает родителей стилей, используемых в APK. | 
| resources | Печатает содержимое таблицы ресурсов APK. | 
| xmlstrings | Печатает строки из скомпилированного APK APK. | 
| xmltree | Печатает дерево XML-файла, скомпилированного APK. | 
Параметры дампа
 Используйте следующие параметры с dump :
Таблица 5. Параметры дампа
| Вариант | Описание | 
|---|---|
| --no-values | Подавляет вывод значений при отображении ресурса. | 
| --file file | Указывает файл в качестве аргумента, который будет выгружен из APK. | 
| -v | Увеличивает детализацию вывода. | 
Разница
 Используйте diff для сравнения двух APK и выявления различий между ними.
Синтаксис различий
 Общий синтаксис использования diff следующий:
aapt2 diff first.apk second.apk
 Для команды diff нет опций.
Оптимизировать
 optimize используется для оптимизации объединенных ресурсов и resources.arsc перед их упаковкой в APK. Эта оптимизация может уменьшить размер APK примерно на 1–3 %, в зависимости от размера и количества используемых ресурсов.
Оптимизировать синтаксис
 Общий синтаксис использования optimize следующий:
aapt2 optimize options file[,file[..]]
 В следующем примере ресурсы в input.apk оптимизируются, а в output.apk создается новый оптимизированный APK. Он заменяет обычное представление плоской таблицы более компактным двоичным деревом поиска, в результате чего APK становится меньше за счет производительности поиска: 
aapt2 optimize -o output.apk --enable-sparse-encoding input.apk
Оптимизировать параметры
 С optimize вы можете использовать следующие параметры:
Таблица 6. Варианты оптимизации
| Вариант | Описание | 
|---|---|
| -o path | Указывает выходной путь для APK связанного ресурса. Это обязательный флаг, поскольку вы должны указать путь к выходному APK, который может содержать связанные ресурсы. | 
| -d directory | Указывает путь к выходному каталогу для разделения. | 
| -x path | Указывает путь к файлу конфигурации XML. | 
| -p | Распечатывает артефакты из нескольких APK и завершает работу. | 
| --target-densities density[,density[..]] | Указывает разделенный запятыми список плотностей экрана, для которых оптимизирован APK. Из APK удаляются все ресурсы, которые не использовались бы на устройствах с заданной плотностью. | 
| --resources-config-path path |  Указывает путь к файлу  Формат: type/resource_name#[directive][,directive] | 
| -c config[,config[..]] | Указывает список конфигураций, разделенных запятыми, которые необходимо включить. По умолчанию — все конфигурации. | 
| --split path:config[,config[..]] | Разделяет ресурсы на основе набора конфигураций для создания другой версии APK. Необходимо указать путь к выходному APK вместе с набором конфигураций. | 
| --keep-artifacts artifact[,artifact[..]] | Указывает список артефактов, разделенных запятыми, которые необходимо сохранить. Если ничего не указано, все артефакты сохраняются. | 
| --enable-sparse-encoding | Включает кодирование разреженных записей с использованием двоичного дерева поиска. Этот параметр полезен для оптимизации размера APK, но за счет производительности получения ресурсов. | 
| --collapse-resource-names | Свертывает имена ресурсов до одного значения в пуле строк ключей. Ресурсы исключаются с помощью директивы no_collapseв файле, указанном--resources-config-path. | 
| --shorten-resource-paths | Сокращает пути к ресурсам внутри APK. | 
| --resource-path-shortening-map path | Указывает путь для вывода карты старых путей к ресурсам в сокращенные пути. | 
| -v | Увеличивает детализацию вывода. | 
| -h | Отображает справку по инструменту. | 
Конвертировать
 По умолчанию команда compile AAPT компилирует ресурсы в двоичный формат, подходящий для APK. Также можно указать формат protobuf, подходящий для AAB, указав --proto-format . Команда convert преобразует APK-файлы между двумя форматами.
Преобразование синтаксиса
 Общий синтаксис convert выглядит следующим образом: 
aapt2 convert -o output-file options file[,file[..]]
В следующем примере ресурсы в input.apk преобразуются и создается новый APK в output.apk , содержащий ресурсы формата protobuf. Он заменяет обычное представление плоской таблицы более компактным двоичным деревом поиска, в результате чего APK становится меньше за счет производительности поиска: 
aapt2 convert -o output.apk --output-format proto --enable-sparse-encoding input.apk
Конвертировать параметры
 Используйте следующие параметры с convert :
Таблица 7. Параметры конвертации
| Вариант | Описание | 
|---|---|
| -o path | Указывает выходной путь для APK связанного ресурса. Это обязательный флаг, поскольку вы должны указать путь к выходному APK, который может содержать связанные ресурсы. | --output-format [proto|binary] | Формат вывода. Принимаемые значения — protoиbinary. Если не установлено, по умолчанию используетсяbinary. | 
| --enable-sparse-encoding | Включает кодирование разреженных записей с использованием двоичного дерева поиска. Этот параметр полезен для оптимизации размера APK, но за счет производительности поиска ресурсов. | 
| --keep-raw-values | Сохраняет необработанные значения атрибутов в файлах XML. | 
| -v | Увеличивает детализацию вывода. | 
| -h | Отображает справку по инструменту. | 
Режим демона
В AAPT версии 2.19 введен режим демона для выдачи команд. Режим демона позволяет вводить несколько команд за один сеанс AAPT.
Синтаксис демона
Запустите режим демона с помощью следующей команды:
aapt2 daemon
После запуска режима демона вы можете вводить команды. Каждый аргумент команды должен находиться на отдельной строке с пустой строкой в конце команды. Выйдите из режима демона, нажав Control+D.
 Рассмотрим следующие отдельные команды compile : 
aapt2 compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ aapt2 compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/
Эти команды можно ввести в режиме демона следующим образом:
aapt2 daemon Ready compile project_root/module_root/src/main/res/values-en/strings.xml -o compiled/ Done compile project_root/module_root/src/main/res/drawable/myImage.png -o compiled/ Done ^D Exiting daemon
Параметры режима демона
 Единственный параметр для режима демона — это --trace-folder folder , который генерирует фрагмент трассировки JSON systrace для указанной folder .
Версия
 Определите версию AAPT2, которую вы используете, с помощью команды version : 
aapt2 version Android Asset Packaging Tool (aapt) 2.19-8678579
Поведение меняется при использовании AAPT2
До AAPT2 AAPT был версией по умолчанию инструмента упаковки ресурсов Android, который сейчас устарел. Хотя AAPT2 должен сразу работать со старыми проектами, в этом разделе описаны некоторые изменения в поведении, о которых вам следует знать.
Иерархии элементов в манифесте Android
 В предыдущих версиях AAPT элементы, вложенные в неправильные узлы файла AndroidManifest.xml , либо игнорировались, либо вызывали предупреждение. Например, рассмотрим следующий пример: 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myname.myapplication"> <application ... <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <action android:name="android.intent.action.CUSTOM" /> </activity> </application> </manifest>
Предыдущие версии AAPT просто игнорировали неуместный тег <action> .
При использовании AAPT2 вы получаете следующую ошибку:
AndroidManifest.xml:15: error: unknown element <action> found.
Чтобы решить эту проблему, убедитесь, что элементы манифеста вложены правильно. Для получения дополнительной информации прочтите обзор манифеста приложения .
Декларация ресурсов
 Вы больше не можете указать тип ресурса из атрибута name . В следующем примере неправильно объявляется элемент ресурса attr : 
<style name="childStyle" parent="parentStyle"> <item name="attr/my_attr">@color/pink</item> </style>
Такое объявление типа ресурса приводит к следующей ошибке сборки:
Error: style attribute 'attr/attr/my_attr (aka my.package:attr/attr/my_attr)' not found.
Чтобы устранить эту ошибку, явно объявите тип, используя type="attr" : 
<style name="childStyle" parent="parentStyle"> <item type="attr" name="my_attr">@color/pink</item> </style>
Кроме того, при объявлении элемента <style> его родительский элемент также должен быть типом ресурса стиля. В противном случае вы получите сообщение об ошибке, подобное следующему: 
Error: (...) invalid resource type 'attr' for parent of style
Неправильное использование символов ссылки на ресурс @.
 AAPT2 выдает ошибки сборки, если вы опускаете или неправильно размещаете символы ссылки на ресурсы ( @ ). Например, если вы опустите символ при указании атрибута стиля: 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <!-- Note the missing '@' symbol when specifying the resource type. --> <item name="colorPrimary">color/colorPrimary</item> </style>
При сборке модуля AAPT2 выдает следующую ошибку сборки:
ERROR: expected color but got (raw string) color/colorPrimary
Кроме того, если вы неправильно включили этот символ при доступе к ресурсу из пространства имен android : 
... <!-- When referencing resources from the 'android' namespace, omit the '@' symbol. --> <item name="@android:windowEnterAnimation"/>
При сборке модуля AAPT2 выдает следующую ошибку сборки:
Error: style attribute '@android:attr/windowEnterAnimation' not found
Неправильная настройка библиотек
 Если ваше приложение зависит от сторонней библиотеки, созданной с использованием более старых версий Android SDK Build Tools , ваше приложение может аварийно завершить работу во время выполнения без отображения каких-либо ошибок или предупреждений. Этот сбой может произойти из-за того, что во время создания библиотеки поля R.java объявляются final . В результате все идентификаторы ресурсов встроены в классы библиотеки.
 AAPT2 опирается на возможность переназначать идентификаторы ресурсам библиотеки при создании приложения. Если библиотека предполагает, что идентификаторы являются final , и встраивает их в библиотеку DEX, возникает несоответствие времени выполнения.
Чтобы устранить эту ошибку, обратитесь к автору библиотеки, чтобы он пересобрал ее с помощью последней версии инструментов сборки Android SDK и повторно опубликовал библиотеку.
