8. createDebugCompatibleScreenManifests
过程简述:manifest文件中生成compatible-screens,用于屏幕适配
相关代码:CompatibleScreensManifest.kt
9. processDebugManifest
过程简述:合并AndroidManifest.xml文件
相关代码:ProcessApplicationManifest.java、ProcessLibraryManifest.java
10. processDebugResources
过程简述:调用aapt2 link 打包资源并生成R.java文件
相关代码:TaskManager.java → createProcessResTask()
11. compileDebugKotlin
过程简述:编译Kotlin文件为字节码
相关代码:没找到...可能在kotlin插件源码里
12. prepareLintJar
过程简述:拷贝lint jar包到指定位置
相关代码:PrepareLintJar.java
13. avaPreCompileDebug
过程简述:生成annotationProcessors.json文件
相关代码:JavaPreCompileTask.java
14. ompileDebugJavaWithJavac
过程简述:编译java文件
相关代码:AndroidJavaCompile.java
15. compileDebugNdk
过程简述:编译NDK
相关代码:NdkCompile.java
15. mergeDebugShaders
过程简述:合并Renderscript文件(.rs)
相关代码:MergeSourceSetFolders.java
16. compileDebugShaders
过程简述:编译Renderscript文件(.rs)
相关代码:ShaderCompile.java
17. mergeDebugAssets
过程简述:合并assets文件
相关代码:MergeSourceSetFolders.java
18. validateSigningDebug
过程简述:验证签名
相关代码:ValidateSigningTask.kt 附加信息:检查当前Variant的签名配置中是否存在密钥库文件,如果当前密钥库默认为debug keystore,那密钥库不存在也会进行相应的创建。
19. signingConfigWriterDebug
过程简述:编写SigningConfig信息
相关代码:SigningConfigWriterTask.kt
20. checkDebugDuplicateClasses
过程简述:检查重复class
相关代码:CheckDuplicateClassesTask.kt 附加信息:检查项目外部依赖是否不包含重复类,打包成dex的时候再检测报错不怎么友好,所以引入了这个Task用于快速失败。
21. transformClassesWithDexBuilderForDebug
过程简述:将class打包成dex
相关代码:DexArchiveBuilderTransform.java
核心代码解析:
定位到 transform()
方法,可以看到对class的处理分为了两种,目录下的 class和.jar里的class:
跟下 processJarInput()
:
继续跟:convertJarToDexArchive()
对class两种处理方式,最后都走到 convertToDexArchive()
,其中调用了 launchProcessing()
:
这里的 dexArchiveBuilder.convert()
其实就是内部调用dx或d8来打dex,跟下赋值处:
22. transformDexArchiveWithExternalLibsDexMergerForDebug
过程简述:打包第三方库的dex
相关代码:ExternalLibsMergerTransform.kt 核心代码解析:
同样跟 transform()
:
创建了一个 DexMergerTransformCallable
实例,然后调 call()
方法:
比较简单,就是调下dx或d8将上面生成的依赖库的dex合并成一个dex。
23. transformDexArchiveWithDexMergerForDebug
过程简述:打包最终的dex
相关代码:DexMergerTransform.transform() → mergeDex() 核心代码解析:
跟下 submitForMerging()
:
也是创建了一个 DexMergerTransformCallable
实例,剩余逻辑同上~
24. mergeDebugJniLibFolders
过程简述:合并jni lib文件
相关代码:MergeSourceSetFolders.java
25. transformNativeLibsWithMergeJniLibsForDebug
过程简述:合并jnilibs
相关代码:MergeJavaResourcesTransform.java
26. transformNativeLibsWithStripDebugSymbolForDebug
过程简述:去掉native lib里的debug符号
相关代码:
StripDebugSymbolTransform.java
27. processDebugJavaRes
过程简述:处理java res
相关代码:MergeJavaResourcesTransform.java
28. transformResourcesWithMergeJavaResForDebug
过程简述:合并java res
相关代码:MergeJavaResourcesTransform.java
29. packageDebug
过程简述:打包APK
相关代码:PackageApplication.java → PackageAndroidArtifact.doTask()
核心代码如下:
而上面的这些updateXxx()方法,调用的都是:IncrementalPackager → updateFiles()
最终调用mApkCreator.writeZip将上述内容写入到APK中。
30. extractProguardFiles
过程简述:生成混淆文件
相关代码:ExtractProguardFiles.java
补充:锚点Task → 空Task
上面的Tasks过滤了锚点Task,啥事锚点Task?答:空Task,用来表明处于某种状态。
以 preBuild
为例,全局搜它,定位到: TaskManager → MAIN_PREBUILD
:
跟下引用处:createTasksBeforeEvaluate()
:
注册了一个名为 **MAIN_PREBUILD
**的Task,但没有传闭包(任务内容),即空Task。
小结
以上就是本节的全部内容