提交 3f725ee3 编写于 作者: S superq_sky

Refactored TaskHookerManager.

上级 db38c198
package com.didi.virtualapk
import com.android.build.gradle.internal.api.ApplicationVariantImpl
import com.didi.virtualapk.hooker.DxTaskHooker
import com.didi.virtualapk.hooker.MergeAssetsHooker
import com.didi.virtualapk.hooker.MergeJniLibsHooker
import com.didi.virtualapk.hooker.MergeManifestsHooker
import com.didi.virtualapk.hooker.PrepareDependenciesHooker
import com.didi.virtualapk.hooker.ProcessResourcesHooker
import com.didi.virtualapk.hooker.ProguardHooker
import com.didi.virtualapk.hooker.TaskHookerManager
import com.didi.virtualapk.transform.StripClassAndResTransform
import com.didi.virtualapk.utils.FileBinaryCategory
......@@ -63,7 +70,7 @@ class VAPlugin extends BasePlugin {
return
}
taskHookerManager = new TaskHookerManager(project, instantiator)
taskHookerManager = new VATaskHookerManager(project, instantiator)
taskHookerManager.registerTaskHookers()
project.android.applicationVariants.each { ApplicationVariantImpl variant ->
......@@ -143,4 +150,29 @@ class VAPlugin extends BasePlugin {
}
}
}
static class VATaskHookerManager extends TaskHookerManager {
VATaskHookerManager(Project project, Instantiator instantiator) {
super(project, instantiator)
}
@Override
void registerTaskHookers() {
android.applicationVariants.all { ApplicationVariantImpl appVariant ->
if (!appVariant.buildType.name.equalsIgnoreCase("release")) {
return
}
registerTaskHooker(instantiator.newInstance(PrepareDependenciesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeAssetsHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeManifestsHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeJniLibsHooker, project, appVariant))
// registerTaskHooker(instantiator.newInstance(ShrinkResourcesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(ProcessResourcesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(ProguardHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(DxTaskHooker, project, appVariant))
}
}
}
}
......@@ -14,13 +14,13 @@ import org.gradle.internal.reflect.Instantiator
*
* @author zhengtao
*/
public class TaskHookerManager {
public abstract class TaskHookerManager {
private Map<String, GradleTaskHooker> taskHookerMap = new HashMap<>()
protected Map<String, GradleTaskHooker> taskHookerMap = new HashMap<>()
private Project project
private AppExtension android
private Instantiator instantiator
protected Project project
protected AppExtension android
protected Instantiator instantiator
public TaskHookerManager(Project project, Instantiator instantiator) {
this.project = project
......@@ -29,25 +29,9 @@ public class TaskHookerManager {
project.gradle.addListener(new VirtualApkTaskListener())
}
public void registerTaskHookers() {
android.applicationVariants.all { ApplicationVariantImpl appVariant ->
if (!appVariant.buildType.name.equalsIgnoreCase("release")) {
return
}
registerTaskHooker(instantiator.newInstance(PrepareDependenciesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeAssetsHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeManifestsHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(MergeJniLibsHooker, project, appVariant))
// registerTaskHooker(instantiator.newInstance(ShrinkResourcesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(ProcessResourcesHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(ProguardHooker, project, appVariant))
registerTaskHooker(instantiator.newInstance(DxTaskHooker, project, appVariant))
}
}
public abstract void registerTaskHookers()
private void registerTaskHooker(GradleTaskHooker taskHooker) {
protected void registerTaskHooker(GradleTaskHooker taskHooker) {
taskHooker.setTaskHookerManager(this)
taskHookerMap.put(taskHooker.taskName, taskHooker)
}
......
......@@ -2,6 +2,7 @@ package com.didi.virtualapk.tasks
import com.android.annotations.NonNull
import com.android.build.gradle.api.ApkVariant
import com.didi.virtualapk.utils.TaskUtil
import com.sun.istack.internal.NotNull
import org.gradle.api.Action
import org.gradle.api.DefaultTask
......@@ -82,15 +83,8 @@ public class AssemblePlugin extends DefaultTask{
assemblePluginTask.dependsOn(variant.assemble.name)
}
public static void map(@NonNull Task task, @NonNull String key, @NonNull Callable<?> value) {
if (task instanceof GroovyObject) {
ConventionMapping conventionMapping =
(ConventionMapping) ((GroovyObject) task).getProperty("conventionMapping");
conventionMapping.map(key, value);
} else {
throw new IllegalArgumentException(
"Don't know how to apply convention mapping to task of type " + task.getClass().getName());
}
static void map(@NonNull Task task, @NonNull String key, @NonNull Callable<?> value) {
TaskUtil.map(task, key, value)
}
}
......
package com.didi.virtualapk.utils
import com.android.annotations.NonNull
import org.gradle.api.Task
import org.gradle.api.internal.ConventionMapping
import java.util.concurrent.Callable
/**
* Created by qiaopu on 2018/3/19.
*/
public class TaskUtil {
public static void map(@NonNull Task task, @NonNull String key, @NonNull Callable<?> value) {
if (task instanceof GroovyObject) {
ConventionMapping conventionMapping =
(ConventionMapping) ((GroovyObject) task).getProperty("conventionMapping");
conventionMapping.map(key, value);
} else {
throw new IllegalArgumentException(
"Don't know how to apply convention mapping to task of type " + task.getClass().getName());
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册