如何查看Android Studio中由Gradle任务执行的CLI命令?

我正试图更好地了解Android Studio在构buildAndroid应用程序时幕后发生的情况。 我一直在阅读Gradle,但是我无法弄清楚的是如何查看Gradle调用的各个CLI命令和参数。 它似乎是抽象的,没有login到Gradle ConsoleEvent 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

目标

我希望能够看到由Android Studio中的Gradle任务生成的各个CLI命令。

用例示例

我想深入查看传统的Android构build过程。 这包括通过以下方面:

源代码/库代码 – > javac – > Java字节码(.class) – > proguard – >最小化字节码(.class) – > dex – > DEX字节码(.dex)

例如,我想看到由AndroidJavaCompile调用相应的javac命令。 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。 java的

我担心要做到这一点的唯一方法是直接通过源代码,甚至直接从源代码构build。

尽职调查

我在Google,Android博客,Google I / O谈判,Android书籍等方面做了相当多的工作。 我一直无法find一个直接的答案。

Solutions Collecting From Web of "如何查看Android Studio中由Gradle任务执行的CLI命令?"

这是不可能的 。 简而言之,因为大多数Gradle任务不会调用CLI命令。

每个Gradle构build文件都是一个Groovy代码,它随着Gradle API(用Java编写)在JVM中执行。 因此,您可以直接使用大多数插件所使用的JVM语言来执行任何任务或configurationfunction,而不必执行命令行工具。 不过,这可以通过使用或扩展Exec任务来实现。

编译步骤由AndroidJavaCompile任务处理,该任务通过一些版本检查和即时运行function来扩展公共JavaCompile Gradle任务。 但是,您不知道Gradle如何实际编译.java文件。 在Gradle API的JavaCompile任务的内部源文件中,似乎有各种各样的实现( DaemonJavaCompilerJdkJavaCompiler甚至CommandLineJavaCompiler )。 既然你可以用你的任务指定CompilerOptions ,Gradle似乎根据这些选项select了真正的编译器。 请注意,即使存在一个CommandLineJavaCompiler ,Gradle也可能(很有可能)使用javax.tools包及其JavaCompiler实现来编译源文件,而不是调用命令行工具。

我还在示例构build过程中查看了ProGuard步骤:ProGuard可以用作命令行工具,您可以在其中指定参数以定义其工作方式。 但是ProGuard也提供了一个Gradle任务( ProGuardTask ),它不需要从命令行调用ProGuard。 ProGuard Java代码将在Gradle JVM中执行。

正如你所看到的,即使每个Gradle任务可能被一个(或多个)CLI命令取代,Gradle也不会执行这些命令。 相反,这个function是直接在Gradle JVM中调用的。 如果您想获得更好的洞察力,可以增加Gradle日志级别 。 Gradle任务的良好实现应该在日志中提供所有必要的信息。