当我给 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 版别 |
有些过程是同一个操作下的几个分过程,假如总结一下便是如下简化版别:
- 预编译(Pre-Compilation) :在编译 APK 的过程中,会进行预编译阶段。这个阶段主要包含资源处理、代码转化和预处理等操作。例如,资源处理包含将资源文件编译成二进制格式;代码转化能够将 Kotlin 或 Java 代码编译成字节码;预处理阶段或许触及资源合并、代码生成(注解生成代码)等。
- 编译(Compilation) :在这个阶段,会将项目中的源代码(Java、Kotlin等)编译成可执行的字节码文件。编译过程通常会查看源代码中的语法错误,并生成对应的类文件。
- 资源打包(Resource Packaging) :将预编译阶段处理的资源文件(包含图画、布局文件、字符串等)和编译阶段生成的字节码文件一同打包成 APK
- 输出(Output) :将多种文件打包放置到正确的位置(Java,kotlin生成class,然后变成的dex,本地库so等,)终究一步是生成终究的 APK 文件,包含给 APK 文件指定称号、方针路径,并将签名后的 APK 文件复制到方针路径。
上面的30多个过程,总结起来便是这么4个。项目装备中 ,我没有添加签名文件以及二进制优化对齐,假如加上之后,在3-4之间还会有两个过程:
- 签名(Signing) :在发布使用之前,需要对 APK 进行签名以保证使用的完整性和安全性。签名过程触及生成密钥库、创立签名证书和对 APK 进行签名等操作
- 对齐(Alignment) :为了提高使用在设备上的加载速度和执行效率,需要对 APK 进行对齐操作。对齐会调整 APK 中的数据结构,以便在设备上更高效地读取。
这些使命组合在一同,构成了构建过程中的不同阶段,负责处理资源、编译代码、查看重复项、合并文件以及打包 APK 等操作。经过这些使命的有序执行,终究产出了 Flavor1Release 版别的 APK 文件。