运行时AOP插桩demo测试

运行时AOP插桩demo测试


HarmonyOS
2024-05-22 22:27:34
浏览
已于2024-5-23 21:24:13修改
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
dushinongmin
AOP插桩功能测试,包括代码前插桩、后插桩、替换以及重复插桩
addBefore 前插桩 
addAfter 后插桩 
replace 替换

使用的核心API

import util from '@ohos.util';

核心代码解释

插桩的核心测试代码

import util from '@ohos.util'; 
import { A } from './Test'; 
​ 
@Entry 
@Component 
struct Index { 
@State message: string = 'Hello World'; 
//"sss": B; 
build() { 
  Row() { 
    Column() { 
      Text(this.message) 
        .fontSize(50) 
        .fontWeight(FontWeight.Bold) 
        .onClick(()=>{ 
          let a:A = new A(); 
          //代码前插桩 
          //重复插桩测试 
          util.Aspect.addBefore(A, "c", false, 
            (instance: A, arg: string): void => { 
              console.log("execute before"); 
              instance.b = "dataChangedByBefore1"; 
              console.log("arg is1 " + arg); 
            } 
          ); 
          util.Aspect.addBefore(A, "c", false, 
            (instance: A, arg: string): void => { 
              console.log("execute before"); 
              instance.b = "dataChangedByBefore2"; 
              console.log("arg is2 " + arg); 
            } 
          ); 
          util.Aspect.addBefore(A, "c", false, 
            (instance: A, arg: string): void => { 
              console.log("execute before"); 
              instance.b = "dataChangedByBefore3"; 
              console.log("arg is3 " + arg); 
            } 
          ); 
          a.c("xx"); 
          console.log(a.b) 
          console.log("-----------------------") 
          //代码后插桩 
          util.Aspect.addAfter(A, "c", false, 
            (instance: A, arg: string): void => { 
              console.log("execute after"); 
              instance.b = "dataChangedByAfter1"; 
              console.log("arg is4 " + arg); 
            } 
          ); 
          a.c("xx"); 
          console.log(a.b) 
          console.log("-----------------------") 
          //替换 
          util.Aspect.replace(A, "c", false, 
            (instance: A, arg: string): void => { 
              console.log("execute replace"); 
              instance.b = "dataChangedByReplace1"; 
              console.log("arg is5 " + arg); 
            } 
          ); 
          a.c("xx") 
          console.log(a.b) 
          console.log("-----------------------") 
          //let b = getContext(); 
          //ContextTest.getInstance(getContext()); 
          //a(); 
        }) 
    } 
    .width('100%') 
  } 
  .height('100%') 
} 
} 

被插桩对象

export class A{ 
b: string = "xx"; 
c(arg: string){ 
  console.log(this.b); 
} 
}

实现效果

适配版本

DevEco Studio Version: 4.1.3.500

SDK:HarmoneyOS NEXT Developer Preview1

分享
微博
QQ
微信
回复
2024-05-23 21:26:52
相关问题
基于AOP的代码,都有哪些场景?
245浏览 • 1回复 待解决
获取运行时编译构建参数
477浏览 • 1回复 待解决
应用运行时进程资源使用规格
571浏览 • 1回复 待解决
如何动态查看代码运行时变量值?
249浏览 • 1回复 待解决
把arkts运行时,当成 JS上下文用
465浏览 • 1回复 待解决
如何对异步方法进行/替换
261浏览 • 1回复 待解决
如何对namespace中的函数或替换?
297浏览 • 1回复 待解决
如何通过AOP统计方法执行时
242浏览 • 1回复 待解决
延迟任务执行时机及运行线程
749浏览 • 1回复 待解决
Ohos Library module 如何运行测试 ?
1403浏览 • 1回复 待解决