Android打包主要Task解析

239 阅读2分钟

Android打包主要task解析

包体积优化就离不开apk构建,甚至依赖于apk构建,AGP的升级可能也会对构建时包体积大小做一定的优化,比如AGP4.2版本的资源路径的优化会减少产出的apk包体大小,甚至AGP升级也会影响自定义的gradle插件,所以熟悉AGP相关的task是非常重要的

  • 一、查看当前AGP版本对应的打包task

命令行输入:./gradlew :app:assembleDebug --console=plain 这里的app替换为你的application的模块名,默认是app

就能看到项目对应AGP版本的打包task了 我的AGP版本是7.4.1

TaskStatus
app:preBuildUP-TO-DATE
app:preDebugBuildUP-TO-DATE
app:mergeDebugNativeDebugMetadataNO-SOURCE
app:compileDebugAidlNO-SOURCE
app:compileDebugRenderscriptNO-SOURCE
app:generateDebugBuildConfigUP-TO-DATE
app:javaPreCompileDebugUP-TO-DATE
app:checkDebugAarMetadataUP-TO-DATE
app:generateDebugResValuesUP-TO-DATE
app:mapDebugSourceSetPaths
app:extractDeepLinksDebugUP-TO-DATE
app:processDebugMainManifest
app:processDebugManifestUP-TO-DATE
app:processDebugManifestForPackageUP-TO-DATE
app:mergeDebugShadersUP-TO-DATE
app:compileDebugShadersNO-SOURCE
app:generateDebugAssetsUP-TO-DATE
app:mergeDebugAssetsUP-TO-DATE
app:compressDebugAssetsUP-TO-DATE
app:processDebugJavaResNO-SOURCE
app:desugarDebugFileDependenciesUP-TO-DATE
app:mergeDebugJniLibFoldersUP-TO-DATE
app:mergeDebugNativeLibsNO-SOURCE
app:stripDebugDebugSymbolsNO-SOURCE
app:validateSigningDebugUP-TO-DATE
app:writeDebugAppMetadataUP-TO-DATE
app:writeDebugSigningConfigVersionsUP-TO-DATE
app:checkDebugDuplicateClasses
app:mergeLibDexDebugUP-TO-DATE
app:mergeDebugJavaResource
app:mergeExtDexDebug
app:mergeDebugResources
app:processDebugResources
app:compileDebugJavaWithJavac
app:dexBuilderDebug
app:mergeProjectDexDebug
app:packageDebug
app:createDebugApkListingFileRedirectUP-TO-DATE
app:assembleDebug

下面是一些task主要的作用和实现类:

Task对应实现类作用
preBuild空 task,只做锚点使用
preDebugBuild空 task,只做锚点使用,与 preBuild 区别是这个 task 是 variant 的锚点
compileDebugAidlAidlCompile处理 aidl
compileDebugRenderscriptRenderscriptCompile处理 renderscript
checkDebugManifestCheckManifest检测 manifest 是否存在
generateDebugBuildConfigGenerateBuildConfig生成 BuildConfig.java
prepareLintJarPrepareLintJar拷贝 lint jar 包到指定位置
generateDebugResValuesGenerateResValues生成 resvalues,generated.xml
generateDebugResources空 task,锚点
mergeDebugResourcesMergeResources合并资源文件
createDebugCompatibleScreenManifestsCompatibleScreensManifestmanifest 文件中生成 compatible-screens,指定屏幕适配
processDebugManifestMergeManifests合并 manifest 文件
splitsDiscoveryTaskDebugSplitsDiscovery生成 split-list.json,用于 apk 分包
processDebugResourcesProcessAndroidResourcesaapt 打包资源
generateDebugSources空 task,锚点
javaPreCompileDebugJavaPreCompileTask生成 annotationProcessors.json 文件
compileDebugJavaWithJavacAndroidJavaCompile编译 java 文件
compileDebugNdkNdkCompile编译 ndk
compileDebugSources空 task,锚点使用
mergeDebugShadersMergeSourceSetFolders合并 shader 文件
compileDebugShadersShaderCompile编译 shaders
generateDebugAssets空 task,锚点
mergeDebugAssetsMergeSourceSetFolders合并 assets 文件
transformClassesWithDexBuilderForDebugDexArchiveBuilderTransformclass 打包 dex
transformDexArchiveWithExternalLibsDexMergerForDebugExternalLibsMergerTransform打包三方库的 dex,在 dex 增量的时候就不需要再 merge 了,节省时间
transformDexArchiveWithDexMergerForDebugDexMergerTransform打包最终的 dex
mergeDebugJniLibFoldersMergeSouceSetFolders合并 jni lib 文件
transformNativeLibsWithMergeJniLibsForDebugMergeJavaResourcesTransform合并 jnilibs
transformNativeLibsWithStripDebugSymbolForDebugStripDebugSymbolTransform去掉 native lib 里的 debug 符号
processDebugJavaResProcessJavaResConfigAction处理 java res
transformResourcesWithMergeJavaResForDebugMergeJavaResourcesTransform合并 java res
validateSigningDebugValidateSigningTask验证签名
packageDebugPackageApplication打包 apk
assembleDebug空 task,锚点

reference:github.com/zjcoming/an…