🍵补齐Android技能树——从AGP构建过程到APK打包过程(下)

简介: Android Gradle Plugin,简称 AGP,老早之前就想好好研究下Android APK的打包过程,毕竟 APK包体积优化 的前置知识之一。
+关注继续查看

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:


image


跟下 processJarInput()


image


继续跟:convertJarToDexArchive()


image


image


对class两种处理方式,最后都走到 convertToDexArchive(),其中调用了 launchProcessing()


image


image

image


这里的 dexArchiveBuilder.convert() 其实就是内部调用dx或d8来打dex,跟下赋值处:


image


22. transformDexArchiveWithExternalLibsDexMergerForDebug


过程简述:打包第三方库的dex相关代码:ExternalLibsMergerTransform.kt 核心代码解析:


同样跟 transform()


image


创建了一个 DexMergerTransformCallable 实例,然后调 call() 方法:


image


比较简单,就是调下dx或d8将上面生成的依赖库的dex合并成一个dex。


23. transformDexArchiveWithDexMergerForDebug


过程简述:打包最终的dex相关代码:DexMergerTransform.transform() → mergeDex() 核心代码解析:


image


跟下 submitForMerging()


image


也是创建了一个 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()


核心代码如下:


image


而上面的这些updateXxx()方法,调用的都是:IncrementalPackager → updateFiles()


image


image


最终调用mApkCreator.writeZip将上述内容写入到APK中。


30. extractProguardFiles


过程简述:生成混淆文件相关代码:ExtractProguardFiles.java


补充:锚点Task → 空Task


上面的Tasks过滤了锚点Task,啥事锚点Task?答:空Task,用来表明处于某种状态

preBuild 为例,全局搜它,定位到: TaskManager → MAIN_PREBUILD


image


跟下引用处:createTasksBeforeEvaluate()


image


注册了一个名为 **MAIN_PREBUILD**的Task,但没有传闭包(任务内容),即空Task。


小结


以上就是本节的全部内容



相关文章
|
12月前
|
传感器 消息中间件 JavaScript
安卓开发过程中的RatingBar、Handler以及GPS在大型项目中的使用【Android】
安卓开发过程中的RatingBar、Handler以及GPS在大型项目中的使用【Android】
135 0
|
12月前
|
XML 存储 网络协议
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
108 0
【Android】使用Android开发应用过程中遇到ViewGroup的简单效以及aw和assets文件夹下的文件(Http协议的底层工作)
|
12月前
|
Java Linux Android开发
转 - Android下一次OOM调试过程
线程数超限,即proc/pid/status中记录的线程数(threads项)突破/proc/sys/kernel/threads-max中规定的最大线程数。
79 0
|
XML Java Android开发
【Android】构建安卓项目过程中的一些细节问题全记录
前言 距离安卓项目结束已经过去了好几天,之后很长一段时间我应该都不会再写和安卓有关的项目了。今天偶然翻到之前写的笔记,想了想还是决定整理出来,希望对后来要完成课设的学弟学妹们有帮助。
91 0
|
Oracle IDE Java
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
229 0
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
|
算法 Java Android开发
补齐Android技能树 - 从害怕到玩转Android代码混淆(下)
本节稍微深入点探索下Android中的代码混淆~
272 0
|
存储 XML Java
补齐Android技能树 - 从害怕到玩转Android代码混淆(中)
本节稍微深入点探索下Android中的代码混淆~
464 0
|
开发工具 Android开发 Kotlin
补齐Android技能树 - 从害怕到玩转Android代码混淆(上)
本节稍微深入点探索下Android中的代码混淆~
255 0
|
XML 缓存 Java
🍵补齐Android技能树——从AGP构建过程到APK打包过程(中)
Android Gradle Plugin,简称 AGP,老早之前就想好好研究下Android APK的打包过程,毕竟 APK包体积优化 的前置知识之一。
228 0
|
Linux API Android开发
🍵补齐Android技能树——从AGP构建过程到APK打包过程(上)
Android Gradle Plugin,简称 AGP,老早之前就想好好研究下Android APK的打包过程,毕竟 APK包体积优化 的前置知识之一。
432 0
相关产品
云迁移中心
推荐文章
更多