diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy index 12e71583a288f1435bc2bf389248588c8db83cbb..f4ef3bb38e59c0ed4a7f0708014523d57abd9e02 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAPlugin.groovy @@ -1,6 +1,13 @@ 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)) + } + } + } } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/TaskHookerManager.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/TaskHookerManager.groovy index 8d896d7b3375167f3c9c867a47c05bc9fab485f6..d147ac81567a65dafb9bc44fb52beb9f0d784083 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/TaskHookerManager.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/hooker/TaskHookerManager.groovy @@ -14,13 +14,13 @@ import org.gradle.internal.reflect.Instantiator * * @author zhengtao */ -public class TaskHookerManager { +public abstract class TaskHookerManager { - private Map taskHookerMap = new HashMap<>() + protected Map 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) } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy index 74b4580060b33dbc854610506d046c1b66321e87..3d6d188382a95693a7e46a95b18789aa4c4e14a0 100644 --- a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/tasks/AssemblePlugin.groovy @@ -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) } } diff --git a/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskUtil.groovy b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskUtil.groovy new file mode 100644 index 0000000000000000000000000000000000000000..75ae193e77f3c0f673e8a8e49811d9a39121d5ca --- /dev/null +++ b/virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/utils/TaskUtil.groovy @@ -0,0 +1,25 @@ +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()); + } + } + +}