系列文章: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中的某些工做: