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

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

HarmonyOS
2024-05-23 22:10:54
727浏览
收藏 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) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

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'); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
分享
微博
QQ
微信
回复
2024-05-24 22:01:25
相关问题
如何异步方法进行/替换
1005浏览 • 1回复 待解决
如何namespace中的函数替换
1283浏览 • 1回复 待解决
运行时AOPdemo测试
1731浏览 • 1回复 待解决
基于AOP的代码,都有哪些场景?
1422浏览 • 1回复 待解决
HarmonyOS 如何
388浏览 • 1回复 待解决
HarmonyOS 如何做行为统计
957浏览 • 1回复 待解决
HarmonyOS C++函数功能
580浏览 • 1回复 待解决
如何使用预览接口进行文件预览
1077浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
2429浏览 • 1回复 待解决
如何使用接口下载文件
2681浏览 • 1回复 待解决
如何定位musl libc接口使用问题
991浏览 • 0回复 待解决
HarmonyOS 如何使用router传接口inteface
468浏览 • 1回复 待解决
HarmonyOS 自定义接口如何使用
575浏览 • 1回复 待解决