HarmonyOS ts装饰器和aspect插桩的结合使用

HarmonyOS ts装饰器和aspect插桩的结合使用 -鸿蒙开发者社区HarmonyOS ts装饰器和aspect插桩的结合使用 -鸿蒙开发者社区打断点发现代码跑到了replace那一步,但后续调用方法时发现替换并没有生效,如果直接调用该方法是生效的。但是这种方式去写,代码会很乱,用装饰器怎么写?

HarmonyOS
2024-12-25 11:58:56
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple

HarmonyOS的Aspect 只支持类方法的插装。以下是示例,在EntryAbility.ets文件下对EntryAbility进行插装:

1、 对类

util.Aspect.addBefore(EntryAbility, “onCreate”, false, (instance: EntryAbility, want: Want): void => {
  let params = want.parameters as Record<string, Object>;
  console.error('testtag 获取pid: '+params[‘ohos.aafwk.param.callerPid’]);
});
  • 1.
  • 2.
  • 3.
  • 4.

2、 异步

class Test {
  static data:string = ‘initData’
  static async printData(arg: string) { // 异步方法
    console.log(‘execute original printData’);
    console.log('Test.data is ’ + Test.data);
    console.log(arg);
    return 0;
  }
}
// 插桩
util.Aspect.addBefore(Test, “printData”, true,
  (classObj: Object, arg: string): void => {
    console.log(“execute before”);
    Reflect.set(classObj, “data”, “dataChangedByBefore”);
    console.log("arg is " + arg);
  }
);

Test.printData(“m1”).then((res) => {
  console.log("res = " + res.toString());
  console.log("Test.data = " + Test.data);
})
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

关于自定义装饰器ArkTS支持TS5.0之前的TS装饰器语法,如果在ets文件中定义装饰器,则需要同时满足ArkTS的语法规则,比如不能使用any等。判断类型可以参照 util.types8当前只支持对类的函数进行插桩,不支持自定义装饰器、字节码插桩、UI组件插桩等。

分享
微博
QQ
微信
回复
2024-12-25 14:33:14
相关问题
Aspect工具装饰使用示例
2960浏览 • 2回复 待解决
HarmonyOS 如何
509浏览 • 1回复 待解决
HarmonyOS C++函数功能
754浏览 • 1回复 待解决
基于AOP代码,都有哪些场景?
1627浏览 • 1回复 待解决
HarmonyOS 如何做行为统计
1104浏览 • 1回复 待解决
如何对异步方法进行/替换
1145浏览 • 1回复 待解决
运行时AOPdemo测试
1921浏览 • 1回复 待解决
如何对namespace中函数或替换?
1474浏览 • 1回复 待解决
装饰 @Styles @Extend
1385浏览 • 1回复 待解决
ListItemGroup lazyforeach如何结合使用
1206浏览 • 1回复 待解决
自定义装饰使用问题
1518浏览 • 1回复 待解决