轉載自http://www.jianshu.com/p/cc88488e5163, http://www.jianshu.com/p/2a5b1aa91c52
大概分爲如下幾個步驟
一、使用aapt工具將res資源文件生成R.java文件
二、使用aidl工具將aidl文件生成對應java文件
三、使用javac命令編譯工程源代碼和上面兩步生成的文件,生成class文件
四、經過dex工具將class文件和第三方jar包打成dex文件
五、用aapt工具將res下的資源文件編譯成二進制文件,而後將其和上一步中的dex文件以及assets中的文件經過apkbuilder工具打包成apk文件
六、經過jarsigner對apk進行簽名
七、利用zipalign工具對apk進行字節對齊優化操做
1.clean 清理工程 刪除build文件夾 // ************** Configuration on demand is an incubating feature ******* 二、preBuild 每一個module 都會執行preBuild 準備配置文件 三、preReleaseBuild 準備release configuration 在 preBuild 以後執行 會依賴preBuild 四、checkReleaseManifest 檢查 release下的manifest 在 preReleaseBuild 以後執行 依賴preReleaseBuild 五、preDebugAndroidTestBuild 準備debug下的Test 在preBuild後執行 依賴preBuild 六、preDebugBuild 準備 debug configuration 在preBuild後執行 依賴preBuild 七、preDebugUnitTestBuild 準備 debug下的單元測試構建 在preBuild後執行 依賴preBuild 八、preReleaseUnitTestBuild 準備 release下的單元測試構建 在preBuild後執行 依賴preBuild // ***************** 以上 build 文件夾不存在 *********************************** // **************** 接下來是對依賴的包 進行下載 *********************在build/incremental/exploded-aar下 九、prepareComAndroidSupportSupportV42311Library 生成 Android SupportV4.23.1庫支持 在build/incremental/exploded-aar下 十、prepareComNdAndroidSmartcanCommonsUtilAar1205SmartcanReleaseLibrary 生成 smartcan.commons.util-aar.1.2.0.5.smartcan.release 十一、prepareComNdAndroidSmartcanDatalayerAar1205SmartcanReleaseLibrary 生成 smartcan.commons.datalayer-aar.1.2.0.5.smartcan.release 十二、prepareComNdAndroidSmartcanDatatransferAar1205SmartcanReleaseLibrary 生成 smartcan.commons.datatransfer-aar.1.2.0.5.smartcan.release 1三、prepareComNdAndroidSmartcanFrameworkAar1205SmartcanReleaseLibrary 生成 smartcan.commons.framnework-aar.1.2.0.5.smartcan.release 1四、prepareComNdAndroidSmartcanNetworkAar1205SmartcanReleaseLibrary 生成 smartcan.commons.network-aar.1.2.0.5.smartcan.release 1五、prepareComNdAndroidSmartcanSmartcanCoreAar1205SmartcanReleaseLibrary 生成 smartcan.commons.smartcan.core-aar.1.2.0.5.smartcan.release 1六、prepareComNdAndroidSmartcanSmartcanDatacollectionAar1205SmartcanReleaseLibrary 生成 smartcan.commons.datacollection-aar.1.2.0.5.smartcan.release 1七、prepareComNdSdpAndroidProcesscheck108Library 生成 android.process.check.1.0.8 1八、prepareReleaseDependencies 加載 遠端的依賴 加載 全部的須要從遠端下載的依賴 1九、compileReleaseAidl 編譯release環境下的 AIDL文件 依賴prepareDebugDependencies 在build/incremental/aidl/release下 20、compileReleaseRenderscript 編譯 release環境下的渲染腳本, Renderscript用來進行高性能計算,是一種類C腳本語言 依賴prepareDebugDependencies 在build/incremental/rs/release下 2一、generateReleaseBuildConfig 會生成 releasse下的 資源和源碼 包括BuildConfig 在build/generate/source/buildConfig/release 依賴checkReleaseManifest 2二、generateReleaseAssets 生成 release下的 Assets文件 但沒有徹底生成個 算是準備 2三、mergeReleaseAssets 生成 debug下的Assets文件 在 build/intermediates/assets/release下, 和 merge.xml文件 在build/intermediates/incremental/mergeAssets/release下 依賴ReleaseDependencies 2四、generateReleaseResValues 準備resource的 values文件 2五、generateReleaseResources 準備 資源文件 2六、mergeReleaseResources release下的 生成Resource文件 在build/incremental/res/release下 和 merge.xml 在build/intermediates/incremental/mergeResources/release下 2七、processReleaseManifest 依賴prepareReleaseDependencies 生成 AndroidManifest文件 在build/incremental/manifest/full/release 2八、processReleaseResources 生成resources-release.ap_ 在 build/intermediates/resources下 2九、generateReleaseSources 生成R文件 在build/generate/source/r/debug下 30、processReleaseJavaRes 3一、compileReleaseJavaWithJavac 使用Javac編譯Java代碼 3二、proguardRelease 生成 混淆文件 運行混淆規則 3三、androidJavadocsPicked 3四、copyMappingTask 複製 mapping文件 3五、androidJavadocsJar 生成 Javadocs的Jar文件 3六、androidSourcesJar 生成 Java源碼的 Jar文件 3七、compileLint 靜態代碼檢查 3八、copyDebugLint 3九、checkDebugManifest 檢查 release下的manifest 在 preDebugBuild 以後執行 依賴preDebugBuild 40、prepareDebugDependencies debug下 加載 遠端的依賴 加載 全部的須要從遠端下載的依賴 4一、compileDebugAidl 編譯debug環境下的 AIDL文件 依賴prepareDebugDependencies 在build/incremental/aidl/debug下 4二、compileDebugRenderscript 編譯 debug環境下的渲染腳本 依賴prepareDebugDependencies 在build/incremental/rs/debug下 4三、generateDebugBuildConfig 會生成 debug下的 資源和源碼 包括BuildConfig 在build/generate/source/buildConfig/debug 依賴checkDebugManifest 4四、generateDebugAssets 準備 debug下的 Assets文件 4五、mergeDebugAssets 生成 debug下的Assets文件 在 build/intermediates/assets/debug下, 和 merge.xml文件 在build/intermediates/incremental/mergeAssets/debug下 依賴ReleaseDependencies 4六、generateDebugResValues 準備resource的 values文件 件 4七、generateDebugResources 準備 資源文件 4八、mergeDebugResources 生成資源文件 在generateDebugResources後執行 在build/incremental/res/debug下 和 merge.xml在build/intermediates/incremental/mergeResources/debug下 4九、processDebugManifest 依賴prepareReleaseDependencies 生成 AndroidManifest文件 在build/incremental/manifest/full/release 50、processDebugResources 生成resources-debug.ap_ 在 build/intermediates/resources下 5一、generateDebugSources 生成R文件 在build/generate/source/r/debug下 5二、processDebugJavaRes 生成Java資源文件 5三、compileDebugJavaWithJavac 使用Javac編譯Java代碼 5四、extractDebugAnnotations 5五、mergeDebugProguardFiles 生成混淆文件 5六、compileDebugNdk 編譯NDK 5七、packageDebugJniLibs 打包本地依賴包 5八、packageDebugRenderscript 打包渲染腳本 5九、packageDebugResources debug 打包資源文件 60、proguardDebug 混淆 6一、bundleDebug 6二、compileDebugSources 編譯java源碼 6三、assembleDebug 編譯建立Jar包 6四、copyReleaseLint 6五、extractReleaseAnnotations 6六、mergeReleaseProguardFiles 生成混淆文件 在buil/outputs/ 6七、compileReleaseNdk 6八、packageReleaseJniLibs 6九、packageReleaseRenderscript 70、packageReleaseResources 80、bundleRelease 8一、compileReleaseSources 編譯 8二、assembleRelease 編譯建立Jar包 8三、assemble 包含了項目中的全部打包相關的任務,好比java項目中打的jar包,Android項目中打的apk 8四、lint android靜態代碼檢查 8五、prepareDebugUnitTestDependencies 加載單元測試以來的遠程包 8五、processDebugUnitTestJavaRes 生成單元測試 8六、compileDebugUnitTestJavaWithJavac 使用Javac編譯Java單元測試代碼 8七、compileDebugUnitTestSources 編譯單元測試 源碼 8八、mockableAndroidJar 8九、assembleDebugUnitTest 編譯打包 90、testDebugUnitTestPicked 測試UT 9一、prepareReleaseUnitTestDependencies 加載 UT的依賴 9二、processReleaseUnitTestJavaRes 加載UT須要的資源文件 9三、compileReleaseUnitTestJavaWithJavac 使用Javac編譯Java單元測試代碼 9四、compileReleaseUnitTestSources 編譯單元測試 源碼 9五、assembleReleaseUnitTest 編譯打包 9六、testReleaseUnitTestPicked 測試UT 9七、test 包含了全部的測試任務 9八、check 包含了項目中全部驗證相關的任務 9九、:build 包含全部的 build任務 100、uploadArchivesUploading: 上傳