如何使用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
相关问题
如何异步方法进行/替换
555浏览 • 1回复 待解决
如何namespace中的函数替换
705浏览 • 1回复 待解决
运行时AOPdemo测试
820浏览 • 1回复 待解决
基于AOP的代码,都有哪些场景?
547浏览 • 1回复 待解决
HarmonyOS 如何做行为统计
224浏览 • 1回复 待解决
如何使用预览接口进行文件预览
274浏览 • 1回复 待解决
如何选择使用同步接口还是异步接口
1981浏览 • 1回复 待解决
如何使用接口下载文件
1917浏览 • 1回复 待解决
如何定位musl libc接口使用问题
255浏览 • 0回复 待解决
鸿蒙系统有没有调用锁屏的接口
6772浏览 • 1回复 待解决
使用OkHttp访问本地接口会失败?
9841浏览 • 2回复 待解决
如何Serviceabbility进行调试?
2851浏览 • 1回复 待解决
http接口如何设置cookie
1768浏览 • 1回复 待解决