Interface MainProcessHandler

    • Method Summary

      All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods 
      Modifier and Type Method Description
      void afterTransform​(TransformEngine transformer)
      用于transform完成后,进行各种illegal check It's usually used for plugin's custom illegal check after transform.
      void beforeTransform​(TransformEngine transformer)
      用于transform前的准备工作 Prepare for real transform.
      default void beforeTraverse​(TransformEngine transformer)
      用于transform前的准备工作,在traverseIncremental之后,traverse方法之前执行。可以判断是否走增量 It is used for preparation before transform, and is executed after traverseIncremental and before traverse method.
      default int flagForClassReader​(Process process)
      Custom your own flag for ClassReader.
      default int flagForClassWriter()
      Custom your own flag for ClassWriter.
      void init()
      Deprecated.
      default void init​(TransformEngine transformer)
      用于transform开始前初始化实现 used for initialization before transform started.
      default boolean isOnePassEnough()
      Whether skip traverse, do transform only.
      default boolean needPreVerify()
      这个Handler是不是要求在真正执行前进行一次校验 Verify bytecode before transform.
      default boolean needVerify()
      在执行完这个Handler后是否需要进行一次校验 Verify bytecode after transform.
      default java.util.List<FileProcessor> process​(Process process)
      在traverse和transform的过程中,加入自定义的FileProcessor,提供更大的灵活性。 Add custom FileProcessor during traverse or transform.
      default void startRunning​(TransformEngine transformer)
      启动运行操作回调,表示马上开始处理过程。这个是traverse(java.lang.String, com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain)方法前面的一个声明周期。此时增量状态已经完全确定,不能修改。 建议在此时判断在是否增量构建然后再加载增量cache.
      boolean transform​(java.lang.String relativePath, ClassVisitorChain chain)
      handle 工程中的所有class To process all classed in the whole project.
      boolean transform​(java.lang.String relativePath, org.objectweb.asm.tree.ClassNode node)
      handle 工程中的所有class To process all classed in the whole project.
      void traverse​(java.lang.String relativePath, ClassVisitorChain chain)
      遍历工程中所有的class Traverse all classes in the whole project.
      void traverse​(java.lang.String relativePath, org.objectweb.asm.tree.ClassNode node)
      遍历工程中所有的class Traverse all classes in the whole project.
      void traverseAndroidJar​(java.lang.String relativePath, ClassVisitorChain chain)
      遍历android.jar中所有的class Traverse all classes in android.jar.
      void traverseAndroidJar​(java.lang.String relativePath, org.objectweb.asm.tree.ClassNode node)
      遍历android.jar中所有的class Traverse all classes in android.jar.
      default void traverseIncremental​(FileData fileData, ClassVisitorChain chain)
      遍历工程中所有的增量文件,不仅仅是class,如果是jar则会解压之后将entry传递进来 状态可能为ADD,REMOVE,CHANGED这几种状态,只在增量构建时有效
      default void traverseIncremental​(FileData fileData, org.objectweb.asm.tree.ClassNode node)
      遍历工程中所有的增量文件,不仅仅是class,如果是jar则会解压之后将entry传递进来 状态可能为ADD,REMOVE,CHANGED这几种状态,只在增量构建时有效
    • Method Detail

      • init

        default void init​(@Nonnull
                          TransformEngine transformer)
        用于transform开始前初始化实现 used for initialization before transform started.
        Parameters:
        transformer - engine
      • traverseIncremental

        default void traverseIncremental​(@Nonnull
                                         FileData fileData,
                                         @Nullable
                                         ClassVisitorChain chain)
        遍历工程中所有的增量文件,不仅仅是class,如果是jar则会解压之后将entry传递进来 状态可能为ADD,REMOVE,CHANGED这几种状态,只在增量构建时有效

        traverse all incremental file which status is ADD,REMOVE or CHANGED file will be uncompressed which is jar input. only valid while during incremental build

        Parameters:
        fileData - 增量文件 incremental file
        chain - 如果是class,则会传递对应的ClassVisitorChain用于加入自定义的ClassVisitor,如果有不是class 则为null If it is a class, the corresponding ClassVisitorChain will be passed to add a custom ClassVisitor, or null if there is not a class
      • traverseIncremental

        default void traverseIncremental​(@Nonnull
                                         FileData fileData,
                                         @Nullable
                                         org.objectweb.asm.tree.ClassNode node)
        遍历工程中所有的增量文件,不仅仅是class,如果是jar则会解压之后将entry传递进来 状态可能为ADD,REMOVE,CHANGED这几种状态,只在增量构建时有效

        traverse all incremental file which status is ADD,REMOVE or CHANGED file will be uncompressed which is jar input. only valid while during incremental build

        Parameters:
        fileData - 增量文件,该文件一定是class文件。 Incremental file, and the file must be a class file.
        node - 对应的Class解析后的的Tree Node结构 Tree Node
      • beforeTraverse

        default void beforeTraverse​(@Nonnull
                                    TransformEngine transformer)
        用于transform前的准备工作,在traverseIncremental之后,traverse方法之前执行。可以判断是否走增量 It is used for preparation before transform, and is executed after traverseIncremental and before traverse method. Can determine whether to take incremental
        Parameters:
        transformer - from TransformEngine
      • traverse

        void traverse​(@Nonnull
                      java.lang.String relativePath,
                      @Nonnull
                      ClassVisitorChain chain)
        遍历工程中所有的class Traverse all classes in the whole project.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        chain - ClassVisitorChain用于加入自定义的ClassVisitor。 ASM visitor api. ClassVisitorChain is used for appending your custom ClassVisitor.
      • traverse

        void traverse​(@Nonnull
                      java.lang.String relativePath,
                      @Nonnull
                      org.objectweb.asm.tree.ClassNode node)
        遍历工程中所有的class Traverse all classes in the whole project.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        node - class的数据结构(照顾喜欢用tree api的同学)。 ASM tree api.
      • traverseAndroidJar

        void traverseAndroidJar​(@Nonnull
                                java.lang.String relativePath,
                                @Nonnull
                                ClassVisitorChain chain)
        遍历android.jar中所有的class Traverse all classes in android.jar.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        chain - ClassVisitorChain用于加入自定义的ClassVisitor。 ASM visitor api. ClassVisitorChain is used for appending your custom ClassVisitor.
      • traverseAndroidJar

        void traverseAndroidJar​(@Nonnull
                                java.lang.String relativePath,
                                @Nonnull
                                org.objectweb.asm.tree.ClassNode node)
        遍历android.jar中所有的class Traverse all classes in android.jar.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        node - class的数据结构(照顾喜欢用tree api的同学)。 ASM tree api.
      • beforeTransform

        void beforeTransform​(@Nonnull
                             TransformEngine transformer)
        用于transform前的准备工作 Prepare for real transform.
        Parameters:
        transformer - from TransformEngine
      • transform

        boolean transform​(@Nonnull
                          java.lang.String relativePath,
                          @Nonnull
                          ClassVisitorChain chain)
        handle 工程中的所有class To process all classed in the whole project.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        chain - ClassVisitorChain用于注册自定义的ClassVisitor。 ASM visitor api. ClassVisitorChain is used for appending your custom ClassVisitor.
        Returns:
        if false, this class file would be deleted, otherwise it would be output after transform.
      • transform

        boolean transform​(@Nonnull
                          java.lang.String relativePath,
                          @Nonnull
                          org.objectweb.asm.tree.ClassNode node)
        handle 工程中的所有class To process all classed in the whole project.
        Parameters:
        relativePath - class的相对路径。 relative path of class
        node - class的数据结构(照顾喜欢用tree api的同学)。。 ASM tree api.
        Returns:
        if false, this class file would be deleted, otherwise it would be output after transform.
      • afterTransform

        void afterTransform​(@Nonnull
                            TransformEngine transformer)
        用于transform完成后,进行各种illegal check It's usually used for plugin's custom illegal check after transform.
        Parameters:
        transformer - from TransformEngine
      • process

        default java.util.List<FileProcessor> process​(Process process)
        在traverse和transform的过程中,加入自定义的FileProcessor,提供更大的灵活性。 Add custom FileProcessor during traverse or transform.
        Parameters:
        process - enum
        Returns:
        list of FileProcessor
      • flagForClassReader

        default int flagForClassReader​(Process process)
        Custom your own flag for ClassReader. By default, `ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES` for traverse, `0` for transform.
        Parameters:
        process - enum
        Returns:
        flag for ClassReader.
      • flagForClassWriter

        default int flagForClassWriter()
        Custom your own flag for ClassWriter. By default, `ClassWriter.COMPUTE_MAXS` 默认应该是 ClassWriter.COMPUTE_MAXS,非特殊情况没必要复写
        Returns:
        flag for ClassWriter.
      • needPreVerify

        default boolean needPreVerify()
        这个Handler是不是要求在真正执行前进行一次校验 Verify bytecode before transform.
        Returns:
        if true, indicate that need to verify bytecode. Default is false.
      • needVerify

        default boolean needVerify()
        在执行完这个Handler后是否需要进行一次校验 Verify bytecode after transform.
        Returns:
        if true, indicate that need to verify bytecode. Default is false.
      • isOnePassEnough

        default boolean isOnePassEnough()
        Whether skip traverse, do transform only.
        Returns:
        if true, skip traverse(Note:ClassGraph will be invalid). Default is false.