Как я могу просмотреть команду CLI, выполненную заданием Gradle в Android Studio?

Я пытаюсь получить лучшее представление о том, что происходит за кулисами в Android Studio при создании приложения для Android. Я читал Gradle, но я не могу понять, как увидеть соответствующую команду CLI и аргументы, которые вызывается Gradle. Он, кажется, абстрагируется и не регистрируется в Gradle Console или журнале Event Log .

Самое близкое, что я узнал, что происходит внутри Gradle, – это код AOSP.

2.2.2 Источник:

https://android.googlesource.com/platform/tools/base/+/gradle_2.2.2/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks

цели

Я хочу иметь возможность видеть соответствующую команду CLI, которая генерируется задачами Gradle внутри Android Studio.

Пример использования примера

Я хочу подробно изучить процесс разработки Android Legacy. Это включает в себя следующее:

Код исходного кода / библиотеки -> javac -> Java bytecode (.class) -> proguard -> минимизированный байт-код (.class) -> dex -> байт-код DEX (.dex)

Например, я хотел бы увидеть соответствующую команду javac вызывается AndroidJavaCompile . https://android.googlesource.com/platform/tools/base/+/gradle_2.2.2/build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/factory/AndroidJavaCompile. Ява

Я боюсь, что единственный способ сделать это – смотреть напрямую через исходный код или даже строить напрямую из источника.

Юридическая экспертиза

Я довольно много искал в Google, блогах Android, переговорах ввода-вывода Google, в Android-книгах и многом другом. Я не смог найти прямой ответ.

Solutions Collecting From Web of "Как я могу просмотреть команду CLI, выполненную заданием Gradle в Android Studio?"

Это невозможно . Просто потому, что большинство задач Gradle не вызывают команды CLI.

Каждый файл сборки Gradle представляет собой фрагмент кода Groovy, который запускается в JVM вместе с API Gradle (написанный на Java). Поэтому вы можете реализовать любую задачу или функции конфигурации непосредственно на любом языке JVM, из которого большинство плагинов используют вместо выполнения инструментов командной строки. Тем не менее это возможно при использовании или расширении задачи Exec .

Этап компиляции обрабатывается задачей AndroidJavaCompile , которая расширяет общую задачу JavaCompile Gradle некоторыми проверками версий и функцией Instant Run . Однако вы не знаете, как Gradle собирает файлы .java . Во внутренних файлах источника для задачи JavaCompile API Gradle, похоже, существуют различные реализации ( DaemonJavaCompiler , JdkJavaCompiler и даже CommandLineJavaCompiler ). Поскольку вы можете указать CompilerOptions с вашей задачей, Gradle, кажется, выбирает настоящий компилятор на основе этих параметров. Обратите внимание, что даже если существует CommandLineJavaCompiler , также возможно (и весьма вероятно), что Gradle предпочитает использовать пакет javax.tools и его реализацию JavaCompiler для компиляции исходных файлов вместо вызова инструмента командной строки.

Я также посмотрел шаг ProGuard в вашем примере сборки: ProGuard можно использовать как инструмент командной строки, где вы можете указать аргументы, чтобы определить, как это будет работать. Но ProGuard также предоставляет задачу Gradle ( ProGuardTask ), которая выполняется без вызова ProGuard из командной строки. Код Java ProGuard будет выполнен в JVM Gradle.

Как вы можете видеть, даже если каждая задача Gradle может быть заменена одной (или несколькими) командами (-ами) CLI, Gradle не выполняет эти команды. Вместо этого функциональность вызывается непосредственно в JVM Gradle. Если вы хотите получить лучшее представление, вы можете увеличить уровень журнала Gradle . Хорошие реализации задач Gradle должны предоставлять всю необходимую информацию в журналах.