Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查看Android Studio中Gradle任务执行的CLI命令?_Android_Android Studio_Gradle_Android Gradle Plugin - Fatal编程技术网

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

如何查看Android Studio中Gradle任务执行的CLI命令?,android,android-studio,gradle,android-gradle-plugin,Android,Android Studio,Gradle,Android Gradle Plugin,我试图更好地了解在构建Android应用程序时,Android Studio的幕后情况。我一直在阅读Gradle,但有一件事我搞不清楚,那就是如何查看Gradle调用的相应CLI命令和参数。它似乎是抽象的,没有记录到Gradle控制台或事件日志 我能看到的最接近Gradle内部情况的是AOSP代码 2.2.2来源: 目标 我希望能够看到Android Studio中Gradle任务生成的相应CLI命令 用例示例 我想深入查看遗留的Android构建过程。这包括进行以下操作: 源代码/库代码->

我试图更好地了解在构建Android应用程序时,Android Studio的幕后情况。我一直在阅读Gradle,但有一件事我搞不清楚,那就是如何查看Gradle调用的相应CLI命令和参数。它似乎是抽象的,没有记录到
Gradle控制台
事件日志

我能看到的最接近Gradle内部情况的是AOSP代码

2.2.2来源:

目标

我希望能够看到Android Studio中Gradle任务生成的相应CLI命令

用例示例

我想深入查看遗留的Android构建过程。这包括进行以下操作:

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

例如,我希望看到由
AndroidJavaCompile
调用的相应
javac
命令

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

尽职调查


我在谷歌、安卓博客、谷歌I/O对话、安卓书籍等网站上做了不少搜索。我还没有找到一个直截了当的答案。

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

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

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

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


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

感谢您抽出时间回答此问题!除了增加Gradle日志级别之外,是否有一种相当简单的方法来调试这些内部Gradle任务,以查看发生了什么?老实说,我从未试过调试Gradle和/或其插件的内部代码,因为我从未遇到过如此复杂的问题。这是否与任何特定问题有关?