Android项目构建过程分析

一、构建过程分析

我们知道,如果要在Android Studio后会编译整个项目并生成apk包,但是构建的过程中到底执行了什么task呢?我们在terminal中执行以下gradle assembleRelease看一下或者在点击最右侧的gradle任务栏,点击assembleRelease任务,如下图所示:


点击执行assembleRelease任务

在点击执行gradle assembleRelease任务后,可以看到依次执行了如下一系列任务,具体见下图:

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'.

这个过程可以分为以下几个阶段:
1、预编译。如果主工程依赖了其他module,则被依赖的module也要进行编译。
2、整合资源。这个阶段所有的资源文件会被aapt(Android Asset Packaging Tool)打包。
3、编译。这个阶段源码被编译成字节码,而注解会在这个阶段被解释编译。源码被编译成字节码的过程如下图所示:

源码编译成字节码

4、字节码处理。这个阶段即上面中的即transform task处理阶段。
5、打包发布。这个阶段主工程的library会生成aar文件,而主工程会生成apk文件。

二、参考文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 刚刚读完东野圭吾的解忧杂货店。这本最不像他风格的书确是我最喜欢的一本。看似一章章单独的故事到最后竟然巧妙的联...
    时光里_阅读 353评论 0 0
  • 他便知道这人一定有些来历,膝关节立刻自然而然的宽松,便跪了下去了。 ——鲁迅《阿Q正传》 1. ...
    浩瀚拾荒阅读 391评论 0 0
  • 文/陌宇轩 (黑龙江) 你的擦肩而过 让我拾起很多失落 涨与浮 光与影 起起伏伏 空间中是否跳出另一个我 去辨别 ...
    小哲小诗阅读 100评论 0 0
  • 全世界都知道中国人爱吃,会吃讲究吃。今生要尝遍中国美食恐怕要活到两百岁。中国人的餐馆已经遍布世界各地。食在中国那是...
    洛神婺女阅读 409评论 3 1
  • “清下好友,不用回,你也清一下吧。复制这条信息……就知道谁把你拉黑了” 是不是会经常收到类似这样的群发信息,我之...
    查门阅读 352评论 0 0