如何使用AOP接口对系统接口进行插桩或替换?

如何使用AOP接口对系统接口进行插桩或替换?

HarmonyOS
2024-05-23 22:10:54
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
海不辞水

ArkTS提供的接口本身没有限制参数是否为系统的接口,只要类和方法在运行时是实际存在的对象,并且方法的属性描述符的writable字段为true,就可以使用提供的接口进行插桩和替换。

获取方法的属性描述符的writable字段:

在ts创建ObjectUtil工具类,实现ObjectGetOwnPropertyDescriptor方法(

ets限制使用):

export class ObjectUtil { 
  static ObjectGetOwnPropertyDescriptor(o: any, p: PropertyKey): PropertyDescriptor | undefined{ 
    return Object.getOwnPropertyDescriptor(o, p) 
  } 
}

ets调用工具类获取方法的属性描述符:

class Test { 
  static data: string = "initData"; 
  static printData(): void { 
    console.log("execute original printData"); 
  } 
} 
// 获取 myMethod 的属性描述符 
let des = ObjectUtil.ObjectGetOwnPropertyDescriptor(Test, 'printData') 
// 判断 writable 字段是否为 true 
if (des && des.writable) { 
  console.log('Method is writable'); 
} else { 
  console.log('Method is not writable or does not exist'); 
}
分享
微博
QQ
微信
回复
2024-05-24 22:01:25
相关问题
如何异步方法进行/替换
875浏览 • 1回复 待解决
如何namespace中的函数替换
1110浏览 • 1回复 待解决
运行时AOPdemo测试
1460浏览 • 1回复 待解决
基于AOP的代码,都有哪些场景?
1189浏览 • 1回复 待解决
HarmonyOS 如何
228浏览 • 1回复 待解决
HarmonyOS 如何做行为统计
771浏览 • 1回复 待解决
HarmonyOS C++函数功能
392浏览 • 1回复 待解决
如何使用预览接口进行文件预览
909浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
2302浏览 • 1回复 待解决
如何使用接口下载文件
2456浏览 • 1回复 待解决
如何定位musl libc接口使用问题
712浏览 • 0回复 待解决
HarmonyOS 自定义接口如何使用
391浏览 • 1回复 待解决
HarmonyOS 如何使用router传接口inteface
295浏览 • 1回复 待解决