DokitMethodStack2Transform.java 2.5 KB
Newer Older
1
package com.didichuxing.doraemonkit.plugin.classtransformer;
J
jackjintai 已提交
2 3 4 5 6 7

import com.android.build.api.transform.Context;
import com.android.build.api.transform.TransformException;
import com.android.build.api.transform.TransformInput;
import com.android.build.api.transform.TransformOutputProvider;
import com.android.build.gradle.AppExtension;
J
jackjintai 已提交
8
import com.didichuxing.doraemonkit.plugin.extension.DoKitExt;
J
jackjintai 已提交
9 10
import com.didichuxing.doraemonkit.plugin.MethodStackNodeUtil;
import com.didichuxing.doraemonkit.plugin.weaver.DokitMethodStackWeaver;
J
jackjintai 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23
import com.quinn.hunter.transform.HunterTransform;
import com.quinn.hunter.transform.RunVariant;

import org.gradle.api.Project;

import java.io.IOException;
import java.util.Collection;

/**
 * ================================================
 * 作    者:jint(金台)
 * 版    本:1.0
 * 创建日期:2019-12-18-11:38
J
jackjintai 已提交
24
 * 描    述:Dokit 函数调用栈 字节码转换器
J
jackjintai 已提交
25 26 27
 * 修订历史:
 * ================================================
 */
J
jackjintai 已提交
28
public class DokitMethodStack2Transform extends HunterTransform {
J
jackjintai 已提交
29

J
jackjintai 已提交
30
    private DoKitExt dokitExtension;
J
jackjintai 已提交
31 32 33
    private String extensionName = "dokitExt";
    private AppExtension appExtension;

J
jackjintai 已提交
34
    public DokitMethodStack2Transform(Project project) {
J
jackjintai 已提交
35 36 37 38
        super(project);
        try {
            this.appExtension = (AppExtension) project.getProperties().get("android");
            //创建自动的代码
J
jackjintai 已提交
39
            this.dokitExtension = (DoKitExt) project.getExtensions().getByName(extensionName);
J
jackjintai 已提交
40
            this.bytecodeWeaver = new DokitMethodStackWeaver(appExtension, MethodStackNodeUtil.LEVEL_2);
J
jackjintai 已提交
41 42 43 44 45 46 47 48 49
            this.bytecodeWeaver.setExtension(dokitExtension);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void transform(Context context, Collection<TransformInput> inputs, Collection<TransformInput> referencedInputs, TransformOutputProvider outputProvider, boolean isIncremental) throws IOException, TransformException, InterruptedException {
50 51 52 53 54
        try {
            super.transform(context, inputs, referencedInputs, outputProvider, isIncremental);
        } catch (Exception e) {
            e.printStackTrace();
        }
J
jackjintai 已提交
55 56 57 58 59 60 61 62 63
    }

    @Override
    protected RunVariant getRunVariant() {
        return dokitExtension.runVariant;
    }

    @Override
    protected boolean inDuplcatedClassSafeMode() {
64 65 66 67 68
        if (dokitExtension != null) {
            return dokitExtension.duplcatedClassSafeMode;
        }

        return false;
J
jackjintai 已提交
69 70
    }
}