系列文章:java
咱们知道在Android Studio中点击运行按钮(下图中的Run)便可对编写的代码进行编译,打包(生成APK),安装APK到目标设备,运行APP。这一系列流程背后都是Gradle这个构建工具帮咱们在作工做,有关Gradle的基本知识已经在Android Gradle原理解释一文中作了不少介绍。bash
本文咱们换个角度,从点击按钮这一行为出发来研究背后的具体流程和原理。除了Run按钮外,还有build,Apply Changes, Debug等按钮也作了相似工做,但应用场景不一样。app
build按钮:对应的是Make Project,编译Project下全部Module,通常是自上次编译后Project下有更新的文件,不生成apk。工具
Apply Changes按钮:将代码和资源更改推送到正在运行的应用,而无需重启应用(在某些状况下,无需重启当前 Activity),是Instant Run功能的替代者。post
Debug按钮:在调试模式下部署应用,在调试模式下运行应用可在代码中设置断点、在运行时检查变量和对表达式求值,以及运行调试工具gradle
Gradle生命周期分为三个阶段,分别是Initialization(初始化阶段),Configuration(配置阶段),和Execution(执行阶段),而执行阶段会执行一系列task,进行主要的构建工做。ui
那么天然Run按钮背后的构建工做也是由一系列task组成的,那么咱们有办法去查看这些task都有哪些么?Android Studio提供了强大的日志记录功能,主要须要进行如下3步工做:spa
完成上述点击后,等待APK安装并运行完成,能够在Android Studio界面下方见到以下日志:3d
Tasks名称:调试
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild UP-TO-DATE
> Task :app:generateDebugBuildConfig UP-TO-DATE
> Task :app:javaPreCompileDebug UP-TO-DATE
> Task :app:mainApkListPersistenceDebug UP-TO-DATE
> Task :app:compileDebugRenderscript NO-SOURCE
> Task :app:compileDebugAidl NO-SOURCE
> Task :app:generateDebugResValues UP-TO-DATE
> Task :app:generateDebugResources UP-TO-DATE
> Task :app:mergeDebugResources UP-TO-DATE
> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
> Task :app:extractDeepLinksDebug UP-TO-DATE
> Task :app:processDebugManifest
> Task :app:processDebugResources
> Task :app:compileDebugJavaWithJavac UP-TO-DATE
> Task :app:compileDebugSources UP-TO-DATE
> Task :app:mergeDebugShaders UP-TO-DATE
> Task :app:compileDebugShaders UP-TO-DATE
> Task :app:generateDebugAssets UP-TO-DATE
> Task :app:mergeDebugAssets UP-TO-DATE
> Task :app:processDebugJavaRes NO-SOURCE
> Task :app:mergeDebugJavaResource UP-TO-DATE
> Task :app:dexBuilderDebug UP-TO-DATE
> Task :app:checkDebugDuplicateClasses UP-TO-DATE
> Task :app:mergeExtDexDebug UP-TO-DATE
> Task :app:mergeDexDebug UP-TO-DATE
> Task :app:mergeDebugJniLibFolders UP-TO-DATE
> Task :app:mergeDebugNativeLibs UP-TO-DATE
> Task :app:stripDebugDebugSymbols UP-TO-DATE
> Task :app:validateSigningDebug UP-TO-DATE
> Task :app:packageDebug
> Task :app:assembleDebug
复制代码
上述tasks大概可分为五个阶段:
a. 调用 aapt 生成项目和全部 aar 依赖的R.java b. 生成资源索引文件 c. 输出符号表
此过程可参考详解Android Gradle生成字节码流程
下图是详细版的Android 构建过程,可对应上述系列tasks中的某些工做: