前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

作者头像
韩曙亮
发布2023-03-29 17:30:09
3660
发布2023-03-29 17:30:09
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、查看使用 AspectJ 后生成的 Class 字节码类


在 Android Studio 中查找编译的 MainActivity 字节码文件 , 最终在 Y:\002_WorkSpace\001_AS\AOP_Demo\app\build\intermediates\javac\debug\classes\com\example\aop_demo 目录下找到 MainActivity.class 文件 ;

字节码文件内容 :

代码语言:javascript
复制
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.example.aop_demo;

import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.runtime.reflect.Factory;

public class MainActivity extends AppCompatActivity {
    public MainActivity() {
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(2131427356);
    }

    @Monitor("textClick")
    public void textClick(View view) {
        JoinPoint var3 = Factory.makeJP(ajc$tjp_0, this, this, view);
        textClick_aroundBody1$advice(this, view, var3, MonitorAspect.aspectOf(), (ProceedingJoinPoint)var3);
    }

    static {
        ajc$preClinit();
    }
}

二、AspectJ 的本质


Java 源码 通过 javac 编译器 编译后得到 Class 字节码文件 ;

AspectJ 也是一个编译器 , AspectJ 编译 Java 代码时 , 加入了 AOP 相关代码 ;

在 Gradle 配置中 , 也配置了 Java 编译器相关配置项 ;

代码语言:javascript
复制
    JavaCompile javaCompile = variant.javaCompile
    javaCompile.doLast {
        String[] args = ["-showWeaveInfo",
                         "-1.8",
                         "-inpath", javaCompile.destinationDir.toString(),
                         "-aspectpath", javaCompile.classpath.asPath,
                         "-d", javaCompile.destinationDir.toString(),
                         "-classpath", javaCompile.classpath.asPath,
                         "-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
        log.debug "ajc args: " + Arrays.toString(args)

完整配置参考 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 ) 博客 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、查看使用 AspectJ 后生成的 Class 字节码类
  • 二、AspectJ 的本质
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档