gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:37 24 4
gpt4 key购买 nike

我试图更好地了解在构建 Android 应用程序时 Android Studio 幕后发生的事情。我一直在阅读 Gradle,但我无法弄清楚的一件事是如何查看 Gradle 调用的相应 CLI 命令和参数。它似乎是抽象的,没有记录到 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 构建过程。这包括执行以下操作:

源代码/库代码 -> 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

我担心这样做的唯一方法是直接查看源代码,甚至直接从源代码构建。

尽职调查

我在 Google、Android 博客、Google I/O 演讲、Android 书籍等方面进行了大量搜索。我一直无法找到直接的答案。

最佳答案

不可能。很简单,因为大多数 Gradle 任务不调用 CLI 命令。

每个 Gradle 构建文件都是一段在 JVM 中与 Gradle API(用 Java 编写)一起执行的 Groovy 代码。因此,您可以直接在任何 JVM 语言中实现任何任务或配置功能,大多数插件使用而不是执行命令行工具。然而,这可以通过使用或扩展 Exec 来实现。任务。

编译步骤由 AndroidJavaCompile 处理任务,它扩展了公共(public) JavaCompile Gradle 任务通过一些版本检查和 Instant Run特征。但是,您不知道 Gradle 实际上是如何编译 .java 文件的。在internal source files对于 Gradle API 的 JavaCompile 任务,似乎有各种实现(DaemonJavaCompilerJdkJavaCompiler 甚至 CommandLineJavaCompiler ).由于您可以在任务中指定 CompilerOptions,因此 Gradle 似乎会根据这些选项选择真正的编译器。请注意,即使 CommandLineJavaCompiler 存在,Gradle 也有可能(而且很有可能)更喜欢使用 javax.tools包及其 JavaCompiler 实现来编译源文件,而不是调用命令行工具。

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

如您所见,即使每个 Gradle 任务可能被一个(或多个)CLI 命令替换,Gradle 也不会执行这些命令。相反,该功能直接在 Gradle JVM 中调用。如果您想获得更好的洞察力,可以increase the Gradle log level . Gradle 任务的良好实现应该在日志中提供所有必要的信息。

关于android - 如何在 Android Studio 中查看 Gradle 任务执行的 CLI 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com