当我给 build.gradle中添加了渠道支撑之后,假如我想要输出flavor1渠道的release包,

flavorDimensions "channel"
​
productFlavors {
  flavor1 {
    dimension "channel"
    // 装备其他自定义特点
   }
​
  flavor2 {
    dimension "channel"
    // 装备其他自定义特点
   }
​
  // 添加更多的渠道装备
}

那么我会执行命令:gradlew assembleFlavor1Release, Run窗口显示如下

> Task :app:preFlavor1ReleaseBuild UP-TO-DATE
> Task :app:compileFlavor1ReleaseAidl NO-SOURCE
> Task :app:generateFlavor1ReleaseBuildConfig UP-TO-DATE
> Task :app:compileFlavor1ReleaseRenderscript NO-SOURCE
> Task :app:mainApkListPersistenceFlavor1Release
> Task :app:generateFlavor1ReleaseResValues UP-TO-DATE
> Task :app:generateFlavor1ReleaseResources UP-TO-DATE
> Task :app:mergeFlavor1ReleaseResources UP-TO-DATE
> Task :app:createFlavor1ReleaseCompatibleScreenManifests
> Task :app:extractDeepLinksFlavor1Release UP-TO-DATE
> Task :app:processFlavor1ReleaseManifest
> Task :app:processFlavor1ReleaseResources
> Task :app:compileFlavor1ReleaseKotlin UP-TO-DATE
> Task :app:javaPreCompileFlavor1Release UP-TO-DATE
> Task :app:compileFlavor1ReleaseJavaWithJavac UP-TO-DATE
> Task :app:compileFlavor1ReleaseSources UP-TO-DATE
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:lintVitalFlavor1Release
> Task :app:dexBuilderFlavor1Release UP-TO-DATE
> Task :app:checkFlavor1ReleaseDuplicateClasses UP-TO-DATE
> Task :app:mergeExtDexFlavor1Release UP-TO-DATE
> Task :app:mergeDexFlavor1Release UP-TO-DATE
> Task :app:mergeFlavor1ReleaseShaders UP-TO-DATE
> Task :app:compileFlavor1ReleaseShaders UP-TO-DATE
> Task :app:generateFlavor1ReleaseAssets UP-TO-DATE
> Task :app:mergeFlavor1ReleaseAssets UP-TO-DATE
> Task :app:processFlavor1ReleaseJavaRes NO-SOURCE
> Task :app:mergeFlavor1ReleaseJavaResource UP-TO-DATE
> Task :app:mergeFlavor1ReleaseJniLibFolders UP-TO-DATE
> Task :app:mergeFlavor1ReleaseNativeLibs UP-TO-DATE
> Task :app:stripFlavor1ReleaseDebugSymbols UP-TO-DATE
> Task :app:packageFlavor1Release
> Task :app:assembleFlavor1Release

从每个task的称号能够看出,生成apk的第一个过程便是: preFlavor1ReleaseBuild , 预编译, 终究一个过程是 assemble,也便是终究的拼装apk的各部分并输出文件。

以下是 每一个过程的详细阐明:

依据你供给的 Gradle 输出日志,每个过程:

过程 阐明
1 预编译
2 AIDL文件编译
3 BuildConfig文件生成
4 编译renderScript文件
5 将 Flavor1Release 的 APK 文件添加到 APK 清单列表中
6 依据 Flavor1Release 的资源值生成相应的类文件
7 依据 Flavor1Release 的资源文件生成资源索引
8 将 Flavor1Release 的一切资源文件合并到一个独自的文件中
9 创立 Flavor1Release 的兼容屏幕清单文件,用于支撑不同的设备屏幕尺度和密度
10 从 Flavor1Release 的清单文件中提取深度链接信息,用于使用内部导航
11 处理 Flavor1Release 的 AndroidManifest.xml 文件,解析和查看装备项并生成 APK 所需的清单文件
12 处理 Flavor1Release 的资源文件,将资源文件编译为二进制格式并进行资源转化和优化处理
13 此使命编译 Flavor1Release 的 Kotlin 源代码
14 编译 Flavor1Release 的 Java 源代码
15 将 Flavor1Release 的 Java 源代码编译成字节码
16 编译 Flavor1Release 的一切源代码,包含 Java 和 Kotlin
17 预备 Lint 工具的使命,此使命用于静态代码剖析和错误查看
18 执行 Flavor1Release 版别的 Lint
19 在 Flavor1Release 构建过程中使用 DEX 构建器
20 查看 Flavor1Release 构建过程中是否存在重复的类文件
21 将 Flavor1Release 构建所需的外部 DEX 文件合并到一个独自的 DEX 文件中
22 将 Flavor1Release 构建过程中生成的一切 DEX 文件合并到一个独自的 DEX 文件中
23 将 Flavor1Release 构建过程中生成的一切 Shaders(着色器)文件合并到一个独自的文件中
24 此使命编译 Flavor1Release 构建过程中的 Shaders 文件
25 生成 Flavor1Release 构建过程所需的资源文件(如图片、音频等)
26 将 Flavor1Release 构建过程中生成的一切资源文件合并到一个独自的文件夹中
27 此使命处理 Flavor1Release 构建过程中的 Java 资源文件
28 将 Flavor1Release 构建过程中生成的一切 Java 资源文件合并到一个独自的文件夹中
29 将 Flavor1Release 构建过程中生成的一切 JNI 库文件合并到一个独自的文件夹中
30 将 Flavor1Release 构建过程中生成的一切本地库文件合并到一个独自的文件夹中
31 去除 Flavor1Release 构建过程中生成的调试符号表(debug symbols)
32 将 Flavor1Release 构建过程中生成的一切文件打包为 APK 文件
33 将 Flavor1Release 构建过程中生成的 APK 文件和其他相关文件拼装成终究的 Flavor1Release 版别

有些过程是同一个操作下的几个分过程,假如总结一下便是如下简化版别:

  1. 预编译(Pre-Compilation) :在编译 APK 的过程中,会进行预编译阶段。这个阶段主要包含资源处理、代码转化和预处理等操作。例如,资源处理包含将资源文件编译成二进制格式;代码转化能够将 Kotlin 或 Java 代码编译成字节码;预处理阶段或许触及资源合并、代码生成(注解生成代码)等。
  2. 编译(Compilation) :在这个阶段,会将项目中的源代码(Java、Kotlin等)编译成可执行的字节码文件。编译过程通常会查看源代码中的语法错误,并生成对应的类文件。
  3. 资源打包(Resource Packaging) :将预编译阶段处理的资源文件(包含图画、布局文件、字符串等)和编译阶段生成的字节码文件一同打包成 APK
  4. 输出(Output) :将多种文件打包放置到正确的位置(Java,kotlin生成class,然后变成的dex,本地库so等,)终究一步是生成终究的 APK 文件,包含给 APK 文件指定称号、方针路径,并将签名后的 APK 文件复制到方针路径。

上面的30多个过程,总结起来便是这么4个。项目装备中 ,我没有添加签名文件以及二进制优化对齐,假如加上之后,在3-4之间还会有两个过程:

  • 签名(Signing) :在发布使用之前,需要对 APK 进行签名以保证使用的完整性和安全性。签名过程触及生成密钥库、创立签名证书和对 APK 进行签名等操作
  • 对齐(Alignment) :为了提高使用在设备上的加载速度和执行效率,需要对 APK 进行对齐操作。对齐会调整 APK 中的数据结构,以便在设备上更高效地读取。

这些使命组合在一同,构成了构建过程中的不同阶段,负责处理资源、编译代码、查看重复项、合并文件以及打包 APK 等操作。经过这些使命的有序执行,终究产出了 Flavor1Release 版别的 APK 文件。