一寸谜、構(gòu)建過(guò)程分析
我們知道竟稳,如果要在Android Studio后會(huì)編譯整個(gè)項(xiàng)目并生成apk包,但是構(gòu)建的過(guò)程中到底執(zhí)行了什么task呢熊痴?我們?cè)趖erminal中執(zhí)行以下gradle assembleRelease看一下或者在點(diǎn)擊最右側(cè)的gradle任務(wù)欄他爸,點(diǎn)擊assembleRelease任務(wù),如下圖所示:
點(diǎn)擊執(zhí)行assembleRelease任務(wù)
在點(diǎn)擊執(zhí)行g(shù)radle assembleRelease任務(wù)后果善,可以看到依次執(zhí)行了如下一系列任務(wù)诊笤,具體見(jiàn)下圖:
20:56:59: Executing task 'assembleRelease'...
Executing tasks: [assembleRelease]
:app:preBuild UP-TO-DATE
:app:preReleaseBuild UP-TO-DATE
:app:checkReleaseManifest
:app:preDebugBuild UP-TO-DATE
:app:prepareComAkexorcistRoundCornerProgressBar203Library
:app:prepareComAlipayEulerAndfix050Library
:app:prepareComAndroidDatabindingAdapters121Library
:app:prepareComAndroidDatabindingLibrary121Library
:app:prepareComAndroidSupportAnimatedVectorDrawable2340Library
:app:prepareComAndroidSupportAppcompatV72340Library
:app:prepareComAndroidSupportCardviewV72340Library
:app:prepareComAndroidSupportDesign2340Library
:app:prepareComAndroidSupportGridlayoutV72340Library
:app:preDebugAndroidTestBuild UP-TO-DATE
:app:prepareComAndroidSupportMultidex101Library
:app:prepareComAndroidSupportRecyclerviewV72340Library
:app:prepareComAndroidSupportSupportV42340Library
:app:prepareComAndroidSupportSupportVectorDrawable2340Library
:app:prepareComFacebookFbuiTextlayoutbuilderTextlayoutbuilder100Library
:app:prepareComFacebookFrescoAnimatedBase130Library
:app:prepareComFacebookFrescoAnimatedGif130Library
:app:prepareComFacebookFrescoAnimatedWebp130Library
:app:prepareComFacebookFrescoDrawee130Library
:app:prepareComFacebookFrescoFbcore130Library
:app:prepareComFacebookFrescoFresco130Library
:app:prepareComFacebookFrescoImagepipeline130Library
:app:prepareComFacebookFrescoImagepipelineBase130Library
:app:prepareComFacebookFrescoImagepipelineOkhttp3130Library
:app:prepareComFacebookFrescoWebpsupport130Library
:app:prepareComFacebookReactReactNative0503Library
:app:prepareComFacebookSoloaderSoloader010Library
:app:prepareComGithubMarkzhaiBlockcanaryAnalyzer150Library
:app:prepareComGithubMarkzhaiBlockcanaryAndroid150Library
:app:prepareComGoogleAndroidFlexbox025Library
:app:prepareComSensetimeCardscanner520Library
:app:prepareComSquareupLeakcanaryLeakcanaryAndroidNoOp13Library
:app:prepareIoReactivexRxjava2Rxandroid201Library
:app:prepareMeEverythingOverscrollDecorAndroid104Library
:app:prepareMeRelexCircleindicator122Library
:app:prepareMeRelexPhotodraweeview112Library
:app:prepareOrgWebkitAndroidJscR174650Library
:app:prepareRepluginHostLibDebugLibrary
:app:prepareReleaseDependencies
:app:compileReleaseRenderscript
:app:generateReleaseResValues
:app:generateReleaseResources
:app:mergeReleaseResources
:app:dataBindingProcessLayoutsRelease
:app:compileReleaseAidl
:app:generateReleaseBuildConfig
:app:rpGenerateReleaseHostConfig
:app:processReleaseResources
:app:generateReleaseSources
:app:dataBindingExportBuildInfoRelease
:app:incrementalReleaseJavaCompilationSafeguard
:app:compileReleaseJavaWithJavac
:app:compileReleaseNdk UP-TO-DATE
:app:compileReleaseSources
:app:lintVitalRelease
:app:mergeReleaseShaders
:app:compileReleaseShaders
:app:generateReleaseAssets
:app:mergeReleaseAssets
:app:rpGenerateReleaseBuiltinJson
:app:transformClassesWithJarMergingForRelease
:app:transformClassesWithMultidexlistForRelease
:app:transformClassesWithDexForRelease
:app:mergeReleaseJniLibFolders
:app:transformNative_libsWithMergeJniLibsForRelease
:app:transformNative_libsWithStripDebugSymbolForRelease
:app:processReleaseJavaRes UP-TO-DATE
:app:transformResourcesWithMergeJavaResForRelease
:app:packageRelease
:app:assembleRelease
BUILD SUCCESSFUL
Total time: 4 mins 17.142 secs
21:01:20: Task execution finished 'assembleRelease'.
這個(gè)過(guò)程可以分為以下幾個(gè)階段:
1、預(yù)編譯岭埠。如果主工程依賴了其他module盏混,則被依賴的module也要進(jìn)行編譯蔚鸥。
2、整合資源许赃。這個(gè)階段所有的資源文件會(huì)被aapt(Android Asset Packaging Tool)打包止喷。
3、編譯混聊。這個(gè)階段源碼被編譯成字節(jié)碼弹谁,而注解會(huì)在這個(gè)階段被解釋編譯。源碼被編譯成字節(jié)碼的過(guò)程如下圖所示:
源碼編譯成字節(jié)碼
4句喜、字節(jié)碼處理预愤。這個(gè)階段即上面中的即transform task處理階段。
5咳胃、打包發(fā)布植康。這個(gè)階段主工程的library會(huì)生成aar文件,而主工程會(huì)生成apk文件展懈。