1+ package com.engineer.plugin
2+
3+ import com.android.build.api.instrumentation.FramesComputationMode
4+ import com.android.build.api.instrumentation.InstrumentationScope
5+ import com.android.build.api.variant.AndroidComponentsExtension
6+ import com.engineer.plugin.extensions.PhoenixExtension
7+ import com.engineer.plugin.extensions.TransformExtension
8+ import com.engineer.plugin.transforms.FooClassVisitorFactory
9+ import com.engineer.plugin.transforms.cat.CatClassVisitorFactory
10+ import com.engineer.plugin.transforms.tiger.TigerClassVisitorFactory
11+ import com.engineer.plugin.transforms.track.TrackClassVisitorFactory
12+ import org.gradle.api.Plugin
13+ import org.gradle.api.Project
14+
15+ /* *
16+ * @author rookie
17+ * @since 11-29-2019
18+ */
19+ abstract class PhoenixPlugin : Plugin <Project > {
20+
21+ override fun apply (project : Project ) {
22+ project.extensions.create(" phoenix" , PhoenixExtension ::class .java, project.objects)
23+
24+ println ()
25+ println (" ===================================PhoenixPlugin===============begin==================" )
26+ println ()
27+
28+
29+ val androidComponents = project.extensions.getByType(AndroidComponentsExtension ::class .java)
30+ val transformExtension = getTransformConfig(project)
31+ androidComponents.onVariants { variant ->
32+ variant.instrumentation.transformClassesWith(
33+ FooClassVisitorFactory ::class .java, InstrumentationScope .ALL
34+ ) {}
35+ variant.instrumentation.setAsmFramesComputationMode(FramesComputationMode .COPY_FRAMES )
36+
37+ variant.instrumentation.transformClassesWith(
38+ TrackClassVisitorFactory ::class .java, InstrumentationScope .PROJECT
39+ ) {
40+ it.trackOn.set(transformExtension.trackOn)
41+ }
42+ variant.instrumentation.setAsmFramesComputationMode(FramesComputationMode .COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS )
43+
44+ variant.instrumentation.transformClassesWith(
45+ CatClassVisitorFactory ::class .java, InstrumentationScope .ALL
46+ ) {
47+ it.catOn.set(transformExtension.catOn)
48+ }
49+
50+ variant.instrumentation.transformClassesWith(
51+ TigerClassVisitorFactory ::class .java, InstrumentationScope .ALL
52+ ) {
53+ it.tigerOn.set(transformExtension.tigerOn)
54+ }
55+ variant.instrumentation.setAsmFramesComputationMode(FramesComputationMode .COMPUTE_FRAMES_FOR_INSTRUMENTED_CLASSES )
56+ }
57+
58+ println ()
59+ println (" ===================================PhoenixPlugin===============end==================" )
60+ println ()
61+ }
62+
63+ private fun getTransformConfig (project : Project ): TransformExtension {
64+ val phoenix = project.extensions.findByType(PhoenixExtension ::class .java)
65+ if (phoenix == null ) {
66+ val transformExtension = TransformExtension ()
67+ transformExtension.catOn = false
68+ transformExtension.tigerOn = false
69+ transformExtension.trackOn = false
70+ transformExtension.tigerClassList = HashMap ()
71+ return transformExtension
72+ }
73+ return phoenix.transform
74+ }
75+
76+ }
0 commit comments