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
| Task | Status |
|---|---|
| app:preBuild | UP-TO-DATE |
| app:preDebugBuild | UP-TO-DATE |
| app:mergeDebugNativeDebugMetadata | NO-SOURCE |
| app:compileDebugAidl | NO-SOURCE |
| app:compileDebugRenderscript | NO-SOURCE |
| app:generateDebugBuildConfig | UP-TO-DATE |
| app:javaPreCompileDebug | UP-TO-DATE |
| app:checkDebugAarMetadata | UP-TO-DATE |
| app:generateDebugResValues | UP-TO-DATE |
| app:mapDebugSourceSetPaths | |
| app:extractDeepLinksDebug | UP-TO-DATE |
| app:processDebugMainManifest | |
| app:processDebugManifest | UP-TO-DATE |
| app:processDebugManifestForPackage | UP-TO-DATE |
| app:mergeDebugShaders | UP-TO-DATE |
| app:compileDebugShaders | NO-SOURCE |
| app:generateDebugAssets | UP-TO-DATE |
| app:mergeDebugAssets | UP-TO-DATE |
| app:compressDebugAssets | UP-TO-DATE |
| app:processDebugJavaRes | NO-SOURCE |
| app:desugarDebugFileDependencies | UP-TO-DATE |
| app:mergeDebugJniLibFolders | UP-TO-DATE |
| app:mergeDebugNativeLibs | NO-SOURCE |
| app:stripDebugDebugSymbols | NO-SOURCE |
| app:validateSigningDebug | UP-TO-DATE |
| app:writeDebugAppMetadata | UP-TO-DATE |
| app:writeDebugSigningConfigVersions | UP-TO-DATE |
| app:checkDebugDuplicateClasses | |
| app:mergeLibDexDebug | UP-TO-DATE |
| app:mergeDebugJavaResource | |
| app:mergeExtDexDebug | |
| app:mergeDebugResources | |
| app:processDebugResources | |
| app:compileDebugJavaWithJavac | |
| app:dexBuilderDebug | |
| app:mergeProjectDexDebug | |
| app:packageDebug | |
| app:createDebugApkListingFileRedirect | UP-TO-DATE |
| app:assembleDebug |
下面是一些task主要的作用和实现类:
| Task | 对应实现类 | 作用 |
|---|---|---|
| preBuild | 空 task,只做锚点使用 | |
| preDebugBuild | 空 task,只做锚点使用,与 preBuild 区别是这个 task 是 variant 的锚点 | |
| compileDebugAidl | AidlCompile | 处理 aidl |
| compileDebugRenderscript | RenderscriptCompile | 处理 renderscript |
| checkDebugManifest | CheckManifest | 检测 manifest 是否存在 |
| generateDebugBuildConfig | GenerateBuildConfig | 生成 BuildConfig.java |
| prepareLintJar | PrepareLintJar | 拷贝 lint jar 包到指定位置 |
| generateDebugResValues | GenerateResValues | 生成 resvalues,generated.xml |
| generateDebugResources | 空 task,锚点 | |
| mergeDebugResources | MergeResources | 合并资源文件 |
| createDebugCompatibleScreenManifests | CompatibleScreensManifest | manifest 文件中生成 compatible-screens,指定屏幕适配 |
| processDebugManifest | MergeManifests | 合并 manifest 文件 |
| splitsDiscoveryTaskDebug | SplitsDiscovery | 生成 split-list.json,用于 apk 分包 |
| processDebugResources | ProcessAndroidResources | aapt 打包资源 |
| generateDebugSources | 空 task,锚点 | |
| javaPreCompileDebug | JavaPreCompileTask | 生成 annotationProcessors.json 文件 |
| compileDebugJavaWithJavac | AndroidJavaCompile | 编译 java 文件 |
| compileDebugNdk | NdkCompile | 编译 ndk |
| compileDebugSources | 空 task,锚点使用 | |
| mergeDebugShaders | MergeSourceSetFolders | 合并 shader 文件 |
| compileDebugShaders | ShaderCompile | 编译 shaders |
| generateDebugAssets | 空 task,锚点 | |
| mergeDebugAssets | MergeSourceSetFolders | 合并 assets 文件 |
| transformClassesWithDexBuilderForDebug | DexArchiveBuilderTransform | class 打包 dex |
| transformDexArchiveWithExternalLibsDexMergerForDebug | ExternalLibsMergerTransform | 打包三方库的 dex,在 dex 增量的时候就不需要再 merge 了,节省时间 |
| transformDexArchiveWithDexMergerForDebug | DexMergerTransform | 打包最终的 dex |
| mergeDebugJniLibFolders | MergeSouceSetFolders | 合并 jni lib 文件 |
| transformNativeLibsWithMergeJniLibsForDebug | MergeJavaResourcesTransform | 合并 jnilibs |
| transformNativeLibsWithStripDebugSymbolForDebug | StripDebugSymbolTransform | 去掉 native lib 里的 debug 符号 |
| processDebugJavaRes | ProcessJavaResConfigAction | 处理 java res |
| transformResourcesWithMergeJavaResForDebug | MergeJavaResourcesTransform | 合并 java res |
| validateSigningDebug | ValidateSigningTask | 验证签名 |
| packageDebug | PackageApplication | 打包 apk |
| assembleDebug | 空 task,锚点 |
reference:github.com/zjcoming/an…