# Aspect_1 **Repository Path**: a_boys/aspect_1 ## Basic Information - **Project Name**: Aspect_1 - **Description**: Aspect 是面向 OpenHarmony(鸿蒙)应用工程的轻量级 AOP(面向切面编程)插件库,核心基于鸿蒙libabcKit字节码操作能力(abckit 框架), 实现字节码层面的无侵入式代码增强。通过该插件,开发者无需修改业务源码,即可在指定方法的执行前、执行后等切面点插入自定义逻辑,轻松实现日志埋点、 参数拦截、方法替换等通用功能,大幅提升代码复用性和业务逻辑的解耦程度。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2026-01-16 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Aspect插件库实现字节码插桩 ## 项目简介 本示例代码展示了如何通过Aspect插件库实现字节码插桩。覆盖场景包括: - 方法定义点前置、后置插桩 - API调用点前置、后置、替换插桩 - UI组件事件回调函数前置、后置插桩 - API异步回调函数前置、后置、替换插桩 ## 效果预览 ## 使用说明 下载代码请复制以下命令到终端运行 ```bash git clone https://gitee.com/harmonyos_samples/aspect.git ``` 或者使用gitee下载ZIP Aspect插件的使用说明请参考[Aspect插件快速开始]() ## 工程目录 ```text ├── ... ├── entry/src/main/ets | └── ... ├── MyAspect/src/main/ets | └── ... ├── aspect.json └── README.md ``` ## 具体实现 ### 1. 编写切面类 切面类可以写在工程源码的模块里,也可以写在另外的自定义模块里。本示例选择写在自定义MyAspect模块里。 ```typescript // MyAspect/src/main/ets/components/MyDefinitionAspect.ets import { Aspect, Before, InsertType, JoinPoint } from 'aspectlibrary' // ... @Aspect class MyDefinitionAspect { @Before({ insertType: InsertType.DEFINITION, scan: { module: "entry", path: "src/main/ets/pages/definition/DefinitionBefore", className: "CompA", methodName: "aboutToAppear" }, }) static addBefore(joinPoint: JoinPoint) { console.log(`[className:${joinPoint.className}, moduleName:${joinPoint.moduleName}]`); } // ... } ``` ### 4. 注册切面类 1. 在切面类文件的同一个模块下,添加`AspectRegistryUtil.ets` ```typescript import { AspectRegistry } from 'aspectlibrary'; import { MyDefinitionAspect } from './components/definition/MyDefinitionAspect'; import { MyCallAspect } from './components/call/MyCallAspect'; // ... export function aspectRegister() { AspectRegistry.register(MyDefinitionAspect); AspectRegistry.register(MyCallAspect); // ... } ``` 2. 在EntryAbility.ets中引入aspectRegister(),并在onCreate()中调用 ```typescript // ... import { aspectRegister } from 'myaspect'; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { aspectRegister(); // ... } } // ... ``` 3. 在工程根目录新建`aspect.json`文件, 用来配置构建模块和切面类路径。 ```text . ├── ... ├── aspect.json // 如果没有需要创建 ├── build-profile.json5 ├── code-linter.json5 └── README.md ``` ```json5 // aspect.json { "entry": [ "MyAspect/src/main/ets/components" ] } ``` ## 相关权限 API调用点插桩示例、API异步回调函数插桩示例需要位置权限。 ```text ohos.permission.LOCATION ohos.permission.APPROXIMATELY_LOCATION ``` ## 约束与限制 - 本示例仅支持标准系统上运行,支持设备:华为手机 - HarmonyOS系统:HarmonyOS 6.0.0 Release及以上 - DevEco Studio版本:DevEco Studio 6.0.0 Release及以上 - HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上