Как использовать aapt2, где находится документация?

Я использовал aapt p упаковывать ресурсы и генерировать R.java,

Но когда я обновился до Android 24, я нашел aapt2.exe,

Должен ли я использовать aapt2.exe? Как мне это использовать? Я не мог найти документацию по этому поводу.

3 ответа

Решение

Есть некоторые большие различия между тем, как работают AAPT и AAPT2.

Компиляция и ссылка

Основная идея AAPT2, помимо новых функций, заключается в том, что он разделяет шаг "package" на два: "compile" и "link". Это повышает производительность, поскольку, если изменяется только один файл, вам нужно только перекомпилировать этот один файл и связать все промежуточные файлы с помощью команды 'link'.

Более ограничительный

AAPT2 пытается поймать большинство ошибок как можно раньше. Вот почему при переключении с AAPT на AAPT2 вы можете столкнуться со многими ошибками, утверждающими, что некоторые элементы вложены неправильно или некоторые ссылки неверны. Для получения дополнительной информации о новых ограничениях смотрите документацию по Android Studio 3.0.

использование

Android Studio 3.0 поставляется с AAPT2, включенным по умолчанию (с плагином Android Gradle 3.0.0). Но если вы хотите использовать AAPT2 в своем собственном скрипте, вам нужно будет изменить способ обработки ваших ресурсов. Для команды package с AAPT вы должны передать каталог ресурсов с ключом -S. В AAPT2 вам необходимо сначала скомпилировать каждый ресурс с помощью команды 'compile, а затем передавать все скомпилированные файлы с флагом -R.
Например:

aapt package -S app/src/main/res/ ...

Вместо этого используйте:

aapt2 compile -o compiled/res/ app/src/main/res/values/values.xml
aapt2 compile -o compiled/res/ app/src/main/res/drawable/myImage.png --no-crunch
...
aapt2 link -R compiled/res/values_values.arsc.flat -R compiled/res/drawable_myImage.flat ...

Флаги

Существует больше различий в использовании флагов, например, флаги "--pseudo-localize" и "--no-crunch" используются для каждого файла на этапе "compile". Для получения полной информации о флагах AAPT2 введите:

aapt2 compile -h
aapt2 link -h

Примечание: рассматривайте это как дополнение к ответу Изабелы

Это (по состоянию на февраль 2018 года) довольно плохо документировано. Авторы службы Overlay Manager Service в Android O недавно представили свои работы и рассказали об AAPT2 на своих слайдах (см. Слайды 12-14 для контекста).

Также, если вы сомневаетесь, посмотрите на исходный код: https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r7/tools/aapt2.

В дополнение к приведенным выше ответам, документация для AAPT2 наконец-то вышла. Вы можете найти документацию здесь. Если вы обнаружите какие-либо ошибки, пожалуйста, сообщите об ошибке в отношении этих ошибок.

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