如何了解Gradle构建Android应用时运行的内部命令?
如果觉得--debug和--info输出的信息要么太杂乱要么不够聚焦,可以试试这些实用方法:
过滤详细日志的关键命令
--debug确实会输出海量信息,但可以通过文本过滤工具只提取外部命令执行的部分:- Linux/macOS:
./gradlew assembleDebug --debug | grep -E "Executing external process|command line:" - Windows:
./gradlew assembleDebug --debug | findstr /C:"Executing external process" /C:"command line:"
这样就能精准筛选出AGP调用的aapt2、d8、zipalign、apksigner等工具的具体命令参数。
- Linux/macOS:
针对单个任务查看细节
先执行./gradlew assembleDebug --dry-run列出构建会触发的所有任务,然后挑你感兴趣的任务单独加日志参数,比如想看资源合并的具体命令,就执行:./gradlew mergeDebugResources --debug
这样输出的信息更聚焦,不会被其他任务的日志干扰。查看Android Gradle Plugin(AGP)源码
AGP的所有构建任务逻辑都是开源的,比如负责APK打包的PackageApplicationTask,里面明确写了调用zipalign和apksigner的命令逻辑;处理字节码编译的D8Task则包含d8编译器的调用细节。直接看这些任务的实现代码,能彻底搞清楚每个步骤的内部执行命令。生成构建Profile报告
执行./gradlew assembleDebug --profile,构建完成后在build/reports/profile目录下会生成HTML报告,里面不仅有每个任务的执行时序、依赖关系,还会标注关键命令的执行细节,能帮你理清整个构建流程的脉络。查看Gradle守护进程日志
Gradle守护进程会把完整的构建日志保存在本地,路径一般是~/.gradle/daemon/<你的Gradle版本>/,这里的日志文件比控制台输出更完整,能找到所有被调用的内部和外部命令。
内容的提问来源于stack exchange,提问作者Rohan Pande

