android注解注入AspectJ面向切面AOP插桩技术改变android原生类对象行为记录View点击事件,Java(3)

news2024/11/24 4:48:28

droid注解注入AspectJ面向切面AOP插桩技术改变android原生类对象行为记录View点击事件,Java(3)

动态改变Toast提示的内容,弹之前修改。Button在每次点击后记录。

import android.util.Log;
import android.widget.Toast;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

//一个切面
@Aspect
public class MyActivityAspect {
    //将在Toast弹出显示前改写文本内容,最终显示zhangphil
    @Before("call(* android.widget.Toast.show())")
    public void changeToast(JoinPoint joinPoint) {
        Toast toast = (Toast) joinPoint.getTarget();
        toast.setText("zhangphil");
        Log.d("zhangphil", "改变Toast行为");
    }

    //监测Button点击事件
    @Pointcut("execution(* android.view.View.OnClickListener.onClick(..))")
    public void onClickPointcut() {

    }

    //在Button点击事件后触发,日志输出
    @After("onClickPointcut()")
    public void clickPoint(ProceedingJoinPoint joinPoint) throws Throwable {
        Log.d("zhangphil", "onClick");
    }
}

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this, "hello,world!", Toast.LENGTH_LONG).show();
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
    }
}

android注解注入AspectJ面向切面AOP插桩技术性能监测android原生类函数/方法运行耗时/时长(2)_zhangphil的博客-CSDN博客android注解注入AspectJ面向切面AOP插桩技术,Java(1)通知注解例如,一个Before:切点匹配规则。android注解注入AspectJ面向切面AOP插桩技术,Java(1)_zhangphil的博客-CSDN博客。https://blog.csdn.net/zhangphil/article/details/129559160

android注解注入AspectJ面向切面AOP插桩技术,Java(1)_zhangphil的博客-CSDN博客android注解注入AspectJ面向切面AOP插桩技术,Java(1)通知注解例如,一个Before:切点匹配规则https://blog.csdn.net/zhangphil/article/details/129559632

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于天牛须(BAS)与NSGA-Ⅱ混合算法的交直流混合微电网多场景多目标优化调度(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

论Shell编程规范与变量

目录 一:shell脚本 1.shell概述 2.linux中包含的常用shell 3.shell脚本概述 4.shell脚本应用场景 5.shell脚本的作用 6.用户的登录shell 二: 编写脚本 1.脚本的基本格式 2.shell脚本的执行 3. 交互式硬件设备 4.重定向操作 5.管道操作符号 “…

信号完整性分析基础知识之传输线和反射(一):阻抗变化引起反射

阻抗不连续引起的反射和失真可能会导致信号的误触发和误码,这是导致信号失真和质量下降的主要原因。 在某些情况下,这看起来像振铃。当信号电平下降时,下冲会影响噪声预算并导致误触发。或者,在下降信号上,峰值可能会上…

阅读笔记 First Order Motion Model for Image Animation

文章解决的是图片动画的问题。假设有源图片和驱动视频,并且其中的物体是同一类的,文章的方法让源图片中的物体按照驱动视频中物体的动作而动。 文章的方法只需要一个同类物体的视频集,不需要而外的标注。 方法 该方法基于self-supervised策…

Qt信号槽原理

Qt之信号槽原理 一.概述 所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这…

idea无效的目标版本和类文件具有错误的版本 61.0, 应为 52.0错误(测试有用,一次性解决问题)

SpringBoot己更新到3后,使用的JAVA版本最低要求JAVA17,如果低于这个版本就是报错: 问题一:类文件具有错误的版本 61.0, 应为 52.0。 解决就只有升级JAVA-sdk: 官方下载地址:JAVA20-17 官方推荐更好的sd…

MySQL 视图、函数和存储过程

MySQL 是一种流行的关系型数据库管理系统,其具有强大的功能和灵活性,使其成为了许多企业和个人喜爱的数据库选择。在 MySQL 中,视图、函数和存储过程是常见的数据库对象,它们都有助于提高数据的处理效率和可重用性。 一、视图 视…

UE5实现Runtime环境下绘制点功能

文章目录 1.实现目标2.实现过程2.1 C++实现2.2 蓝图调用3.参考资料1.实现目标 UE5在Runtime环境下基于PDI绘制点,GIF动态如下: 2.实现过程 UE常用的在运行时环境下绘制点方法主要有两种。一种是基于Mesh,即添加Sphere等StaticMesh来模拟显示绘制点;另一种是基于Primitive的…

用代码实现标签打印的三种方式

最近项目中要实现标签打印的功能,有几个条件 标签模板可以事先生成,用的是CodeSoft软件标签模板里面有二维码标签模板里面有一些变量,要求打印的时候自动填充产线电脑上没有安装CodeSoft,即便安装也不能使用,因为没有…

Java线程池及拒绝策略详解

前文提到线程的使用以及线程间通信方式,通常情况下我们通过new Thread或者new Runnable创建线程,这种情况下,需要开发者手动管理线程的创建和回收,线程对象没有复用,大量的线程对象创建与销毁会引起频繁GC,…

Unity入门(一)

Unity Unity是一套完善体系与编辑器的跨平台游戏开发工具,也可以称之为游戏引擎。游戏引擎是指一些编写好的可以重复利用的代码与开发游戏所用的各功能编辑器。 基于C#编程,易上手,高安全性独特的面向组件游戏开发思想让游戏开发更加简单易…

Maven 如何下载依赖包的源码包

使用Maven下载依赖包的时候, 默认是不会下载源码包的,但是有时候, 需要Debug代码,或是看看依赖项的源码的写法, 就需要下载源码包了。 这里以 Apache 的 commons-text 为例, 在Maven中添加如下依赖配置&am…

pwlink用作USB转TTL,进入HC-05的AT模式

不说废话的文章概括: 直接连接PWLINK与HC-05,无法进入AT模式,因为蓝牙模块的VCC只能接5V,不能接3.3V,而且PWLINK有两个VDD引脚,且两个VDD引脚初始默认输出电压都是3.3V,所以需要将3.3V改为5V的…

【JavaEE】网络通信中的一些基本概念及协议分层

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 互联网是怎么来的?很多先进技术,都是先军用,用了之后太香了才逐渐民用~~ 互联网也是如此,互联网之前,可以通过有线/无线&#xf…

单链表——“数据结构与算法”

各位CSDN的uu们你们好呀,今天,小雅兰的内容终于是我们心心念念的单链表啦,这一块呢,是一个很重要的部分,也是一个对目前的我来说,比较困难的部分,下面,就让我们进入单链表的世界吧 之…

【unity项目实战】3DRPG游戏开发04——导航、人物移动和鼠标指针图片替换

AI导航烘培 还不清楚怎么用的可以看我另一篇文章 零基础带你从小白到超神29——导航系统 将地形调成静态导航的 选中地形,设置为可行区域 点击烘培 可爬坡改为30度,就会发现坑就变为不可行区域了 选择所有的树,为不可行区域,点击烘培 给主角人物添加导航组件

Kafka3.0.0版本——生产者数据可靠性

目录 一、ACK应答原理1.1、应答级别1.1.1、acks 01.1.2、acks 11.1.3、acks -1(all) 1.2、问题思考 二、数据可靠性2.1、数据可靠性分析2.2、 数据完全可靠条件2.3、ACK应答级别可靠性总结 三、数据可靠性代码示例 一、ACK应答原理 1.1、应答级别 1…

一日一题:第十二题---模拟散列表(三种方法!!)

​作者:小妮无语 专栏:一日一题 🚶‍♀️✌️道阻且长,不要放弃✌️🏃‍♀️ 今天来给大家介绍的是简单的Hash表的应用 目录 关于哈希的知识点 题目描述(模拟散列表) 代码 1(拉链…

基于GPT-4的神仙插件Bito,亲测好用

基于GPT-4的神仙插件,无需魔法,目前免费 一、Bito 简介 最近发现一个可以有效提升coding效率的插件神器,截止当前(20230425)已有65k的下载量了! 类似与Cursor一样,可以使用AI辅助写代码,但是又解决Cursor没有语法提…

力扣刷题day35|416分割等和子集

416. 分割等和子集 力扣题目链接 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割…