日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android—AspectJ实践

發布時間:2023/12/18 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android—AspectJ实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AspectJ支持編譯期和加載時代碼注入

Advice(通知):?典型的 Advice 類型有 before、after 和 around,分別表示在目標方法執行之前、執行后和完全替代目標方法執行的代碼。

Joint point(連接點):?程序中可能作為代碼注入目標的特定的點和入口。

Pointcut(切入點):?告訴代碼注入工具,在何處注入一段特定代碼的表達式。

Aspect(切面):?Pointcut 和 Advice 的組合看做切面。例如,在本例中通過定義一個 pointcut 和給定恰當的advice,添加一個了內存緩存的切面。

Weaving(織入):?注入代碼(advices)到目標位置(joint points)的過程。

AspectJ環境配置:

1.配置gradle

根項目gradle:

classpath 'org.aspectj:aspectjtools:1.8.9' classpath 'org.aspectj:aspectjweaver:1.8.9'

AsepctJ項目:

api 'org.aspectj:aspectjrt:1.8.13'import org.aspectj.bridge.IMessage import org.aspectj.bridge.MessageHandler import org.aspectj.tools.ajc.Mainandroid.libraryVariants.all { variant ->JavaCompile javaCompile = variant.javaCompilejavaCompile.doLast {String[] args = ["-showWeaveInfo","-1.5","-inpath", javaCompile.destinationDir.toString(),"-aspectpath", javaCompile.classpath.asPath,"-d", javaCompile.destinationDir.toString(),"-classpath", javaCompile.classpath.asPath,"-bootclasspath", android.bootClasspath.join(File.pathSeparator)]MessageHandler handler = new MessageHandler(true)new Main().run(args, handler)def log = project.loggerfor (IMessage message : handler.getMessages(null, true)) {switch (message.getKind()) {case IMessage.ABORT:case IMessage.ERROR:case IMessage.FAIL:log.error message.message, message.thrownbreakcase IMessage.WARNING:case IMessage.INFO:log.info message.message, message.thrownbreakcase IMessage.DEBUG:log.debug message.message, message.thrownbreak}}} }

如果直接在app的gradle中配置

implementation 'org.aspectj:aspectjrt:1.8.13'import org.aspectj.bridge.IMessage import org.aspectj.bridge.MessageHandler import org.aspectj.tools.ajc.Mainfinal def variants = project.android.applicationVariants variants.all { variant ->JavaCompile javaCompile = variant.javaCompilejavaCompile.doLast {String[] args = ["-showWeaveInfo","-1.5","-inpath", javaCompile.destinationDir.toString(),"-aspectpath", javaCompile.classpath.asPath,"-d", javaCompile.destinationDir.toString(),"-classpath", javaCompile.classpath.asPath,"-bootclasspath", android.bootClasspath.join(File.pathSeparator)]MessageHandler handler = new MessageHandler(true)new Main().run(args, handler)def log = project.loggerfor (IMessage message : handler.getMessages(null, true)) {switch (message.getKind()) {case IMessage.ABORT:case IMessage.ERROR:case IMessage.FAIL:log.error message.message, message.thrownbreakcase IMessage.WARNING:case IMessage.INFO:log.info message.message, message.thrownbreakcase IMessage.DEBUG:log.debug message.message, message.thrownbreak}}} }

注意:在哪使用就需要在哪配置上面的一大段東西,網絡上也有自定義Puglin進行組件化的操作,就不用每個都去設置,但是自己嘗試了報錯。

2.MianActivity代碼

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv = findViewById(R.id.tv);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showToast();}});}private void showToast(){Toast.makeText(MainActivity.this,"aaaaaaaaaaa",Toast.LENGTH_SHORT).show();} }

3.調用AspectJ

@Aspect public class AspectJText {@Before("execution(* com.example.aspectjdemo.MainActivity.showToast(..))")public void show(JoinPoint joinPoint){Toast.makeText((Context) joinPoint.getThis(), "hhhhhh", Toast.LENGTH_SHORT).show();}final String TAG = AspectJText.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());}}

運行結果:

?編譯后文件:

?可以看到編譯后的類文件出現了AspectJ動態加上的語句。

總結

以上是生活随笔為你收集整理的Android—AspectJ实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。