返回顶部
首页 > 资讯 > 移动开发 >Android中使用AspectJ详解
  • 112
分享到

Android中使用AspectJ详解

aspectjAndroid 2022-06-06 01:06:21 112人浏览 薄情痞子
摘要

什么是AOP aop是Aspect Oriented Programming的缩写,即『面向切面编程』。它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』

什么是AOP

aop是Aspect Oriented Programming的缩写,即『面向切面编程』。它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,当然,我们在实际编程过程中,不可能单纯的安装AOP或者OOP的思想来编程,很多时候,可能会混合多种编程思想,大家也不必要纠结该使用哪种思想,取百家之长,才是正道。

那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码的场景中,例如SDK需要无侵入的在宿主中插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。

AspectJ

AspectJ实际上是对AOP编程思想的一个实践,当然,除了AspectJ以外,还有很多其它的AOP实现,例如ASMDex,但目前最好、最方便的,依然是AspectJ。

Android项目中使用AspectJ

在android中配置aspectj是特别麻烦的,尝试在android studio中直接配置aspectj,折腾了半天没有成功,就放弃了,还好GitHub上有个开源的sdkhttps://github.com/HujiangTechnology/gradle_plugin_android_aspectjx,可以直接拿来用,很方便。

接入说明

在项目的根目录的build.gradle文件中添加依赖,修改后文件如下


repositories {
  jcenter()
}
dependencies {
  classpath 'com.android.tools.build:gradle:2.3.0'
  classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.8'
  // NOTE: Do not place your application dependencies here; they belong
  // in the individual module build.gradle files
}

然后在项目或者库的build.gradle文件中添加AspectJ的依赖

compile 'org.aspectj:aspectjrt:1.8.9'

同时在该文件中加入AspectJX模块

apply plugin: 'android-aspectjx'

aspectjx默认会遍历项目编译后所有的.class文件和依赖的第三方库去查找符合织入条件的切点,为了提升编译效率,可以加入过滤条件指定遍历某些库或者不遍历某些库。

includejarFilter和excludeJarFilter可以支持groupId过滤,artifactId过滤,或者依赖路径匹配过滤


aspectjx {
  //织入遍历符合条件的库
  includeJarFilter 'universal-image-loader', 'AspectJX-Demo/library'
  //排除包含‘universal-image-loader'的库
  excludeJarFilter 'universal-image-loader'
}

使用

创建一个AspectTest的类,


@Aspect
public class AspectTest {
  final String TAG = AspectTest.class.getSimpleName();
  @Before("execution(* *..MainActivity+.on**(..))")
  public void method(JoinPoint joinPoint) throws Throwable {
    MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
    String className = joinPoint.getThis().getClass().getSimpleName();
    Log.e(TAG, "class:" + className);
    Log.e(TAG, "method:" + methodSignature.getName());
  }
}

MainActivty的代码如下


public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
}

log如下

log

通过build之后会生成一个aspected.jar的文件

截图

反编译这个jar,会发现它在MainActivity的onCreate中插入了几行代码。

您可能感兴趣的文章:在Android项目中使用AspectJ的方法AndroidStudio 配置 AspectJ 环境实现AOP的方法spring Aop之AspectJ注解配置实现日志管理的方法Android AOP框架AspectJ使用详解分析java 中AspectJ切面执行两次的原因AspectJ的基本用法详解Spring Aop实例之AspectJ注解配置Spring使用AspectJ注解和XML配置实现AOPjava基于AspectJ(面向切面编程)编码示例分享Spring AOP AspectJ使用及配置过程解析


--结束END--

本文标题: Android中使用AspectJ详解

本文链接: https://lsjlt.com/news/21788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中使用AspectJ详解
    什么是AOP AOP是Aspect Oriented Programming的缩写,即『面向切面编程』。它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』...
    99+
    2022-06-06
    aspectj Android
  • android中怎么使用Aspectj
    要在Android中使用AspectJ,需要进行以下步骤:1. 配置AspectJ插件:在项目的build.gradle文件中添加A...
    99+
    2023-08-23
    android Aspectj
  • 在Android项目中使用AspectJ的详细攻詻
    AOP 全称“Aspect Oriented Programming”,面向切面编程,由于面向对象的思想要求高内聚,低耦合的风格,使模块代码间的可见性变差,对于埋点,日志输出等需求,...
    99+
    2024-04-02
  • Aspectj android原理 aspectjrt.jar的作用
    AspectJ是一个面向切面编程的工具,它可以在编译阶段或者运行时修改Java字节码,从而实现一些与业务逻辑无关的横切关注点的功能。...
    99+
    2023-08-22
    android
  • SpringAOP与AspectJ的对比及应用详解
    目录1 简介2 Spring AOP vs AspectJ2.1 织入方式2.2 Joinpoints2.3 性能3 Spring Boot使用AspectJ3.1 引入依赖3.2 ...
    99+
    2023-02-08
    Spring AOP对比AspectJ Spring AOP AspectJ
  • Android中PreferenceActivity使用详解
    目录一,Preference介绍二,PreferencesActivity介绍三,PreferenceActivity的使用四,PreferenceActivity分别和ListFr...
    99+
    2024-04-02
  • Android中PackageManager使用详解
    目录前言引入:AndroidManifest.xml文件节点说明:相关类的介绍PackageManger 类PackageInfo类  PackageItemInfo类Applica...
    99+
    2024-04-02
  • 一文教你使用AspectJ
    本篇文章为大家展示了一文教你使用AspectJ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。AOP虽然是方法论,但就好像OOP中的Java一样,一些先行者也开发了一套语言来支持AOP。目前用得比较火...
    99+
    2023-05-31
    aspectj ct
  • 使用Spring Aop如何配置AspectJ注解
    这篇文章将为大家详细讲解有关使用Spring Aop如何配置AspectJ注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。采用的jdk代理,接口和实现类代码请参考上篇博文。主要是将Aspe...
    99+
    2023-05-31
    springaop aspectj
  • Android 中Banner的使用详解
    首先倒入一个依赖: compile 'com.youth.banner:banner:1.4.9' 添加的权限: <uses-permission android:n...
    99+
    2022-06-06
    Android
  • 详解Android中Dialog的使用
    在Android中经常要使用Dialog来实现一些提示以及一些特殊的效果,而且样式也不一样,每次都得查一大堆资料,还不一定能解决,这里总结一些常用的Dialog的实践。 普通的...
    99+
    2022-06-06
    dialog Android
  • Android中的android:layout_weight使用详解
    在使用LinearLayout的时候,子控件可以设置layout_weight。layout_weight的作用是设置子空间在LinearLayout的重要度(控件的大小比重)...
    99+
    2022-06-06
    weight Android
  • 详解Android中AIDL的使用
    AIDL,即Android Interface Definition Language,Android接口定义语言。这门语言是为了实现进程间通信。每一个进程都有自己的一块独立的内存,...
    99+
    2024-04-02
  • Android中PreferenceFragment的使用详解
    目录PreferenceFragment简介PreferenceFragment使用PreferenceFragment 扩展PreferenceFragment简介 在我们写一个...
    99+
    2024-04-02
  • 详解Android中motion_toast的使用
    目录前言motion_toast 介绍示例最简单用法其他内置的提醒自定义 toast总结前言 我们通常会用 toast(也叫吐司)来显示提示信息,例如网络请求错误,校验错误等等。大多...
    99+
    2024-04-02
  • Android中PopupWindow使用方法详解
    参考原文Android PopupWindow用法解析进行学习,通过实例及PopupWindow源码分析了PopupWindow的使用。文章最后的“补充Case: 弹窗不消失,...
    99+
    2022-06-06
    方法 popupwindow Android
  • Android中HorizontalScrollView使用方法详解
    由于移动设备物理显示空间一般有限,不可能一次性的把所有要显示的内容都显示在屏幕上。所以各大平台一般会提供一些可滚动的视图来向用户展示数据。Android平台框架中为我们提供了诸...
    99+
    2022-06-06
    方法 horizontalscrollview Android
  • 详解Android中Service AIDL的使用
    目录前言Service基本用法——本地服务远程服务 —— AIDL服务端客户端前言 有些朋友可能是从事开发工作的时间不是特别的长,所以觉得Service相对与另外两个组件activi...
    99+
    2024-04-02
  • Android中ExpandableListView使用示例详解
    本文实例为大家分享了ExpandableListView使用示例,供大家参考,具体内容如下MainActivity:public class Expandable_test extends Activity { private Expan...
    99+
    2023-05-30
    android expandablelistview roi
  • Android中Fragment的解析和使用详解
    前言 Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManage...
    99+
    2022-06-06
    fragment Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作