gradle 产出apk文件的全过程

当我给 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 文件。

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYk6060P' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片