美文网首页程序员
Android 进阶笔记 -- ASM 运用

Android 进阶笔记 -- ASM 运用

作者: jimdear | 来源:发表于2020-05-15 10:27 被阅读0次

    1.what is ASM?
    对于了解了JVM之后, 对java代码的操作比较常见的就是字节码插庄了.而java 文件被编译成class 文件之后,其实class文件也是可以被修改的.如下,源文件是:

    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
    import com.xk.annotation_lib.BindView;
    public class MainActivity1 extends AppCompatActivity {
        @BindView(R.id.withText)
        TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    

    那么对应的字节码是啥呢,其实是有一一对应关系的, 如下贴图:

    public class com/xk/annotation_compile/AnnotationHandlerUtils {
    
      // compiled from: AnnotationHandlerUtils.java
    
      // access flags 0x1
      public <init>()V
       L0
        LINENUMBER 7 L0
        ALOAD 0
        INVOKESPECIAL java/lang/Object.<init> ()V
        RETURN
       L1
        LOCALVARIABLE this Lcom/xk/annotation_compile/AnnotationHandlerUtils; L0 L1 0
        MAXSTACK = 1
        MAXLOCALS = 1
    
      // access flags 0x9
      public static handlerBindView()V
       L0
        LINENUMBER 10 L0
        RETURN
        MAXSTACK = 0
        MAXLOCALS = 0
    }
    

    其中相应的代码一一对应的关系,参考asm的api ,意思就是把java代码转换成字节码,这里推荐装一个Android Studio 的插件 ,名字叫ASM Byte Viewer.通过插件商店就可以下载到了啦.
    直接上图:


    ASM插件名图.png

    2.what‘s usage for ASM in Android ?
    那么到底用啥用呢, 如果项目中有集成一些第三方的埋点插件,或者是ButterKnife 你就会发现,他的运用的广泛了.

    这一章就先记录这么多,下一章, 讨论下Javapoet +ASM 实现自定义注解相关内容.

    相关文章

      网友评论

        本文标题:Android 进阶笔记 -- ASM 运用

        本文链接:https://www.haomeiwen.com/subject/vxiqohtx.html