Jon*_*las 10 android gradle android-studio android-gradle-plugin
我正在尝试更好地了解Android Studio在构建Android应用程序时幕后发生的情况.我一直在阅读Gradle,但有一点我无法弄清楚如何查看Gradle调用的相应CLI命令和参数.它似乎是抽象的,没有记录到Gradle Console或Event Log.
我最接近看到Gradle内部发生了什么是AOSP代码.
2.2.2来源:
目标
我希望能够看到Android Studio中Gradle任务生成的相应CLI命令.
用例示例
我想深入了解Legacy Android Build Process.这包括通过以下内容:
源代码/库代码 - > javac - > Java字节码(.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. java的
我担心这样做的唯一方法是直接查看源代码,甚至直接从源代码构建.
尽职调查
我已经在Google,Android博客,Google I/O会谈,Android书籍等方面进行了大量搜索.我一直无法找到直截了当的答案.
那是不可能的.简单地说,因为大多数Gradle任务都不会调用CLI命令.
每个Gradle构建文件都是一段Groovy代码,它与Gradle API(用Java编写)一起在JVM中执行.因此,您可以直接在任何JVM语言中实现任何任务或配置功能,大多数插件都使用该语言而不是执行命令行工具.然而,这可以通过使用或扩展Exec任务来实现.
编译步骤由AndroidJavaCompile任务处理,该JavaCompile任务通过某些版本检查和即时运行功能扩展了常见的Gradle任务.但是,您不知道Gradle如何实际编译.java文件.在内部的源文件为JavaCompile的摇篮API的任务,似乎有不同的实现(DaemonJavaCompiler,JdkJavaCompiler甚至CommandLineJavaCompiler).由于您可以使用CompilerOptions任务指定,Gradle似乎根据这些选项选择真正的编译器.请注意,即使CommandLineJavaCompiler存在,也可能(并且极有可能)Gradle更喜欢使用javax.tools包及其JavaCompiler实现来编译源文件而不是调用命令行工具.
我还看了一下示例构建过程中的ProGuard步骤:ProGuard可以用作命令行工具,您可以在其中指定参数以定义它的工作方式.但是ProGuard还提供了一个Gradle任务(ProGuardTask),它可以在不从命令行调用ProGuard的情况下执行.ProGuard Java代码将在Gradle JVM中执行.
如您所见,即使每个Gradle任务可能被一个(或多个)CLI命令替换,Gradle也不会执行这些命令.相反,该功能直接在Gradle JVM中调用.如果您想获得更好的洞察力,可以增加Gradle日志级别.Gradle任务的良好实现应该在日志中提供所有必要的信息.
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |