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,锚点 |
三、如何去读 Task 的代码
在 gradle plugin 中的 Task 主要有三种,一种是普通的 task,一种是增量 task,一种是 transform,下面分别看下这三种 task 怎么去读。
如何读 Task 的代码
- 看 Task 继承的父类,一般来说,会继承 DefaultTask,IncrementalTask
- 看 @TaskAction 注解的方法,此方法就是这个 Task 做的事情
如何读 IncrementalTask
我们先看看下这个类,这个类表示的是增量 Task,什么是增量呢?是相对于 全量来说的,全量我们可以理解为调用 clean 以后第一次编译的过程,这个就是全量编译,之后修改了代码或者资源文件,再次编译,就是增量编译。
其中比较重要的几个方法如下:
public abstract class IncrementalTask extends BaseTask {
// …
@Internal
protected boolean isIncremental() {
// 是否需要增量,默认是 false
return false;
}
// 需要子类实现,全量的时候执行的任务
protected abstract void doFullTaskAction() throws Exception;
// 增量的时候执行的任务,默认是什么都不执行,参数是增量的时候修改过的文件
protected void doIncrementalTaskAction(Map<File, FileStatus> changedInputs) throws Exception {
}
@TaskAction
void taskAction(IncrementalTaskInputs inputs) throws Exception {
// 判断是否是增量
if(this.isIncremental() && inputs.isIncremental()) {
this.doIncrementalTaskAction(this.getChangedInputs(inputs));
} else {
this.getProject().getLogger().info(“Unable do incremental execution: full task run”);
this.doFullTaskAction();
}
}
// 获取修改的文件
private Map<File, FileStatus> getChangedInputs(IncrementalTaskInputs inputs) {
Map<File, FileStatus> changedInputs = Maps.newHashMap();
inputs.outOfDate((change) -> {