当我们新建一个Android Project,Android Studio 同样为我们创建了构建用Gradle脚本。 当我们执行assembleDebug这个task的时候,就会为我们构建出一个用于debug的apk文件。 在我们构建的过程中,都执行了那些操作,他们的顺序是什么样子呢?
我们一步一步的分析整个过程
目的:
- 让我们对Android的整个构建过程更清楚
- 让我们对Android项目的结构更清楚
- 让我们对apk的生成过程更清楚
- 让我们可以在构建的过程总做一些工作,例如清理一些不必要的文件等等
关于Android的构建流程,官网给了我们一张非常清楚的构建流程图:
当我们执行assembleDebug这个gradle task的时候,我们可以看到在构建过程中依次执行如下任务:
这些任务是从上到下一个一个按顺序执行的
而且这些任务大部分我们都能见名知意。我们可以根据这些任务的意思来对应到上面官网给出的流程图,看一下每个任务都发生在上图的哪个过程中。
下面我们来一个一个简单分析这些任务都做了什么工作
我们如何查看他的源码
好在这个插件的代码都是用java或kotlin写的,看起来不会有语言层级的障碍。
各个Task简介
在本文,我们只是简单将每个Task的意思简单的介绍了下,稍后会对每一个人物进行分析,希望在分析的过程中,能让我们对Android应用有更深的理解。
-
preBuild
构建预处理
-
preDebugBuild
构建debug包的预处理(因为在本文是以构建 debug apk 为例)
-
compileDebugAidl
工程中如果有Aidl文件,则在这个任务中进行编译
-
compileDebugRenderscript
工程中如果有render script,则在这个任中进行编译
-
generateDebugBuildConfig
生成BuildConfig.java文件
-
checkDebugAarMetadata
检查aar依赖库的元数据
-
generateDebugResValues
生成资源文件值
-
generateDebugResources
生成debug的资源文件
-
mergeDebugResources
合并资源文件
-
createDebugCompatibleScreenManifests
创建兼容屏幕的Manifests文件
-
extractDeepLinksDebug
抽离出deep link(DeepLink即为深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本)
-
processDebugMainManifest
处理主模块的Manifest文件
-
processDebugManifest
处理总的Manifest文件
-
processDebugManifestForPackage
处理Manifest文件,为打包做准备
-
processDebugResources
处理资源文件
-
javaPreCompileDebug
java的预编译
-
mergeDebugNativeDebugMetadata
合并调试本地代码的元数据
-
mergeDebugShaders
和并所有的shader文件
-
compileDebugShaders
编译所有的shader文件
-
generateDebugAssets
生成Assets文件
-
mergeDebugAssets
合并assets文件
-
compressDebugAssets
压缩assets文件
-
processDebugJavaRes
处理java资源
-
checkDebugDuplicateClasses
检查是否有重复的类。我们经常在项目构建的时候遇到这个问题而导致构建失败。
-
mergeExtDexDebug
合并额外的dex文件
-
mergeLibDexDebug
合并依赖的aar中的dex文件
-
mergeDebugJniLibFolders
合并依赖的jni文件
-
mergeDebugNativeLibs
合并项目依赖的native库
-
stripDebugDebugSymbols
去掉用户debug的标记
-
validateSigningDebug
验证签名
-
compileDebugKotlin
编译kotlin文件
-
compileDebugJavaWithJavac
用javac命令编译java文件
-
compileDebugSources
编译源码
-
mergeDebugJavaResource
合并java资源
-
dexBuilderDebug
构建dex文件
-
mergeProjectDexDebug
合并工程中的dex
-
packageDebug
打包
-
assembleDebug