Android项目的编译过程

当按下这个绿色的小三角形按钮后,AS到底对我们的Android项目做了什么。当然编译之前必须选择要部署apk设备

run按钮.png

下面是Gradle Console窗口打印的日志

Executing tasks: [:app:assembleDebug]

:app:buildInfoDebugLoader
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:checkDebugManifest UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:prepareLintJar UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:createDebugCompatibleScreenManifests UP-TO-DATE
:app:processDebugManifest
:app:splitsDiscoveryTaskDebug UP-TO-DATE
:app:processDebugResources
:app:generateDebugSources
:app:javaPreCompileDebug UP-TO-DATE
:app:compileDebugJavaWithJavac UP-TO-DATE
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:packageInstantRunResourcesDebug UP-TO-DATE
:app:checkManifestChangesDebug
:app:transformClassesWithExtractJarsForDebug UP-TO-DATE
:app:transformClassesWithInstantRunVerifierForDebug UP-TO-DATE
:app:transformClassesWithDependencyCheckerForDebug UP-TO-DATE
:app:compileDebugNdk NO-SOURCE
:app:mergeDebugJniLibFolders UP-TO-DATE
:app:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
:app:processDebugJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:app:transformNativeLibsAndResourcesWithJavaResourcesVerifierForDebug UP-TO-DATE
:app:transformClassesWithInstantRunForDebug UP-TO-DATE
:app:transformClassesEnhancedWithInstantReloadDexForDebug UP-TO-DATE
:app:incrementalDebugTasks UP-TO-DATE
:app:preColdswapDebug
:app:fastDeployDebugExtractor UP-TO-DATE
:app:generateDebugInstantRunAppInfo UP-TO-DATE
:app:transformClassesWithInstantRunSlicerForDebug UP-TO-DATE
:app:transformClassesWithDexBuilderForDebug
:app:transformDexArchiveWithExternalLibsDexMergerForDebug
:app:transformDexArchiveWithDexMergerForDebug
:app:validateSigningDebug
:app:transformDexWithInstantRunDependenciesApkForDebug
:app:transformDexWithInstantRunSlicesApkForDebug
:app:packageDebug
:app:buildInfoGeneratorDebug
:app:compileDebugSources UP-TO-DATE
:app:assembleDebug

BUILD SUCCESSFUL in 9s
41 actionable tasks: 13 executed, 28 up-to-date

英语好的,可以把这五十多行看一遍也就了解的差不多了。

我大概总结了下:

  1. 首先是预编译,如果主module依赖了其它module,那么被依赖的module也要进行编译
  2. 然后是打包资源文件
  3. 处理配置清单文件和处理资源文件
  4. 编译,源码被编译成字节码。
  5. 执行所有transform开头的任务
  6. 依赖的library生成.aar文件application生成.apk文件

可能从日志看不出这些步骤,但这是大致总结。

下面从网上找到这张图片,描述从aapt工具开始到生成签名apk文件的过程。

Android项目的编译过程_第1张图片
as构建过程.png

具体过程如下:

  • 上图从左上角开始,aapt工具执行两次
    • 第一次生成R文件,联合源码aidl文件一起进行javac编译生成.class文件。
      • 接着用dx工具将.class文件和库文件生成dex文件
    • 第二次res里面的资源文件进行编译
  • 最后APKBuilder会把DEX文件与编译好的资源文件进行打包签名生成最终的APK

你可能感兴趣的:(Android项目的编译过程)