Получение параметров aapt2 сборки gradle? - PullRequest
0 голосов
/ 02 мая 2018

Я заинтересован в попытке скомпилировать приложение для Android из командной строки, используя aapt2. У меня проблема с подключением библиотеки компоновки ограничений, когда я пытаюсь выполнить команду aapt2 link. Эта программа успешно собирается из Android Studio / Gradle. Как я могу заставить вызов командной строки gradle показать мне команду aapt2, которую он выполняет?

Для записи я попытался запустить ./gradlew assemblyDebug --debug, и все, что я вижу, это вызовы библиотеки aapt2-proto.

1 Ответ

0 голосов
/ 03 мая 2018

Ссылка

Команда будет немного сложной и будет зависеть от многих вещей (например, от ваших ресурсов, зависимостей проекта, используемых флагов и т. Д.), Поэтому самый простой способ получить полную команду - это фактически «сломать» ресурс.
Отредактируйте ваш res / values ​​/ strings.xml файл, содержащий:

<string name="incorrect">@string/idontexist</string>

Перейдите в каталог проекта и запустите "gradlew clean assemblyDebug". AAPT2 потерпит неудачу во время соединения, и Android Gradle Plugin выведет всю использованную команду.
Я использую версию 3.2.0-alpha13, и она дает мне команду полностью:

error: failed linking references.
Command: <path>/.gradle/caches/transforms-1/files-1.1/aapt2-3.2.0-alpha13-4662957-linux.jar/cbe84ab07c48b199e5fe8d202dd5845e/aapt2-3.2.0-alpha13-4662957-linux/aapt2 link -I\
      <path>/Android/Sdk/platforms/android-27/android.jar\
      --manifest\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/merged_manifests/debug/processDebugManifest/merged/AndroidManifest.xml\
      -o\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_\
      -R\
      @<path>/AndroidStudioProjects/Library/app/build/intermediates/incremental/processDebugResources/resources-list-for-resources-debug.ap_.txt\
      --auto-add-overlay\
      --java\
      <path>/AndroidStudioProjects/Library/app/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r\
      --proguard-main-dex\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/legacy_multidex_aapt_derived_proguard_rules/debug/processDebugResources/manifest_keep.txt\
      --custom-package\
      com.example.foo.bar\
      -0\
      apk\
      --output-text-symbols\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/symbols/debug/R.txt\
      --no-version-vectors
Daemon:  AAPT2 aapt2-3.2.0-alpha13-4662957-linux Daemon #0

Флаги, используемые здесь для AAPT2:

  • -I : путь к платформе android.jar
  • - манифест : файл манифеста (AGP использует объединенный манифест, а не просто файл из ваших источников)
  • -o : выходной файл
  • -R : ресурсы. Обычно вы передаете один за другим, но поскольку их здесь много, они записываются в файл, а затем этот файл передается в AAPT2 (поэтому перед путем стоит символ «@»)
  • - автоматическое наложение-наложение : разрешить наложение
  • - java : выходной каталог для R.java
  • - proguard-main-dex : выходной файл для правил Proguard для основного dex
  • - нестандартная упаковка : упаковка для класса R
  • -0 : не сжимать эти расширения
  • - выходные текстовые символы : выходной файл для R.txt
  • - no-version-vector : автоматическое управление версиями векторных рисунков отсутствует

Другие флаги, которые могут быть вам полезны:

  • -v : подробное ведение журнала
  • -A : каталог, содержащий ресурсы, которые вы хотите поместить в файл APK, они не будут обрабатываться или сжиматься, просто поместите их как есть в выходной файл
  • : распечатать справку

Компиляция

Команда компиляции довольно проста. Вы в основном указываете AAPT2, какой отдельный файл компилировать и где его выводить.

<path>aapt2 compile -o /path/to/output/dir /path/to/file/to/compile.xml

Флаги для компиляции:

  • -o : каталог, в который будут помещены скомпилированные файлы
  • - псевдо-локализация : генерировать источники для псевдо-локалей
  • - устаревшее : делает AAPT2 более снисходительным и воспринимает некоторые ошибки как предупреждения (как это сделал AAPT1)
  • -v : подробное ведение журнала
  • -h : распечатать справку

Следует иметь в виду, что скомпилированные файлы представляют собой двоичные файлы .flat, а имя вывода основывается на имени ввода и имени родительского каталога файла. Это означает, что если входной файл был res / drawable-450dpi / img.png , то выходной файл будет drawable-450dpi_img.png.flat . Файлы скомпилированных значений получают расширение «arsc.flat» вместо просто «.flat», поэтому файл res / values-en / strings.xml будет скомпилирован в values-en_strings.arsc. квартира . AAPT2 делает это автоматически, поэтому вам не нужно об этом беспокоиться, но это полезно знать, если вам понадобится найти скомпилированный файл позже.

Еще один забавный факт, касающийся компиляции, заключается в том, что запоминание того, каким был входной файл (и номера строк для файлов XML), является изящным, поэтому, если связывание не удается, ошибка не будет указывать на файл .flat, но вместо этого оригинальный исходный файл.

...