在根项目的build.gradle 添加依赖
todo
在主APP模块build.gradle中导入
apply plugin: 'com.wuba.plugin.easyaop'
建议:easy aop 插件导入放在最前面(
apply plugin: 'com.android.application'
后)。 因为插件处理顺序是按照位置前后来进行的,如果放在后面jar包被前面插件处理后就会改变名称(例如变成了1.jar之类的),原名称匹配jar包就不生效了。
配置文件采用yaml
文件格式。
默认查找配置位置是,apply EasyAOP插件所在的模块下的easy_aop_config.yaml
文件。 当然这个也可以进行配置:
# 例如:
EASY_AOP_CFG_YAML_PATH=../app/easy_aop_config_demo.yaml
version: "1.0.0"
logEnabled: true
#输出日志level; VERBOSE:1;DEBUG:2;WARN:3;ERROR:4
logLevel: 2
# 是否对class内容进行格式校验;切面处理时同时对class进行校验,主要是格式校验,格式错误会报错
needAopCheck: false
# 是否对修改过的class进行dex打包校验
needDexCheck: false
# (公共)黑名单,跳过扫描Class
skipClazz:
# 以下正则匹配R文件系列
- _regex_^\S+\.R\.class$
- _regex_^\S+\.R\$anim\.class$
- _regex_^\S+\.R\$array\.class$
- _regex_^\S+\.R\$attr\.class$
- _regex_^\S+\.R\$animator\.class$
- _regex_^\S+\.R\$bool\.class$
- _regex_^\S+\.R\$color\.class$
- _regex_^\S+\.R\$dimen\.class$
- _regex_^\S+\.R\$drawable\.class$
- _regex_^\S+\.R\$font\.class$
- _regex_^\S+\.R\$integer\.class$
- _regex_^\S+\.R\$id\.class$
- _regex_^\S+\.R\$interpolator\.class$
- _regex_^\S+\.R\$layout\.class$
- _regex_^\S+\.R\$menu\.class$
- _regex_^\S+\.R\$mipmap\.class$
- _regex_^\S+\.R\$navigation\.class$
- _regex_^\S+\.R\$plurals\.class$
- _regex_^\S+\.R\$raw\.class$
- _regex_^\S+\.R\$string\.class$
- _regex_^\S+\.R\$style\.class$
- _regex_^\S+\.R\$styleable\.class$
- _regex_^\S+\.R\$xml\.class$
# 字符串全匹配
- com.xx.xx.Xxx.class
# (公共) 白名单,仅扫描class
# 注意:如果配置了白名单,就不在处理黑名单(黑名单失效)
#onlyClazz:
# - _regex_^\S+\.R\$style\.class$
# - com.abc.Def.class
# (公共)黑名单,跳过扫描Jar包
skipJars:
# eg: jetified-kotlin-stdlib-jdk7-1.3.50.jar
- _regex_^\S+kotlin-stdlib-jdk\d-(\d+\.)+jar$
# eg: jetified-kotlin-stdlib-1.3.50.jar
- _regex_^\S+kotlin-stdlib-(\d+\.)+jar$
# 字符串全匹配jar包
- xxx.xx.jar
# (公共) 白名单,仅扫描Jar包
# 注意:如果配置了白名单,就不在处理黑名单(黑名单失效)
#onlyJars:
# - _regex_^\S+kotlin-stdlib-jdk\d-(\d+\.)+jar$
# - abc.sss.jar
# 方法代理
proxyItemsCfg:
#调用目标类
"androidx.core.content.PermissionChecker":
# 该配置生效开关
enabled: true
# 调用替换代理类
proxyClass: "com.wuba.xx.PermissionCheckerProxy"
# (仅当前配置生效)白名单,仅处理class列表
# 注意:如果配置了白名单,就不在处理黑名单(黑名单失效)
# onlyClazz:
# - _regex_^com\.aab\.ccc\.\S*class$
# - com.wuba.xxx.Abc.class
# (仅当前配置生效)黑名单,跳过处理class列表
# skipClazz:
# - _regex_^com\.xxx\.xxx\.\S*class$
# - com.wuba.xxx.Def.class
methodMappingList:
# 目标方法名称##目标方法描述(可省略,省略后就是全匹配): 代理方法名称
"checkSelfPermission": "checkSelfPermission"
"checkPermission": "checkPermission"
# DEV_TOOLS
"com.wuba.utils.OkHttpClientUtils":
# 配置文件也支持使用环境变量来控制。
# 例如在gradle.properties或者系统环境变量中设置了IS_RELEASE变量则会在解析配置的时候获取替换,
# 当然如果没有获取到则会使用配置的默认值,例如这里是true,注意设置默认值需要加前缀":-"
enabled: ${IS_RELEASE:-true}
proxyClass: "com.xxx.mock.OkhttpClientUtilsProxy"
methodMappingList:
"getOkHttpClient": "getOkHttpClient"
"android.content.Context":
enabled: true
proxyClass: "com.wuba.xxx.ContextProxy"
# 设置白名单
onlyClazz:
- _regex_^com\.bumptech\.glide\.\S*class$ # glide
- _regex_^com\.baidu\.location\.\S*class$ # 百度SDK
- _regex_^com\.baidu\.mapsdkvi\.VDeviceAPI\.\S*class$ # 百度SDK
- com.wuba.xxx.NetStateManager.class
- com.wuba.wbvideo.widget.BatteryTimeView.class
- com.wuba.wbvideo.widget.WubaVideoView.class
methodMappingList:
"registerReceiver##(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;": "registerReceiver"
# 方法体置空
emptyItemsCfg:
# eg: OAID sdk 热修复后弹toast问题 方法置空
"com.netease.nis.sdkwrapper.Utils":
enabled: true
methodList:
- "showRiskMessage##(Landroid/content/Context;Ljava/lang/String;)V"
# 要置空的方法所在类
"com.facebook.react.views.webview.ReactWebViewManager":
enabled: true
methodList:
- "setAllowFileAccess##(Landroid/webkit/WebView;Ljava/lang/Boolean;)V"
# 方法体进入退出,插入指定代码
insertItemsCfg:
# 目标方法所在类
"com.wuba.easyaopdemo.Waiter":
# 开关
enabled: false
# “方法体进入”插入的代理类
insertEnterClass: "com.wuba.proxy.WaiterProxy"
# “方法体进入”插入的代理方法名称
insertEnterMethodName: "insertMethodEnter"
# “方法体进入”需要在方法体进入插入的目标方法列表
targetEnterMethodList:
- "makeTea##(I)V"
# “方法体退出”插入的代理类
insertExitClass: "com.wuba.proxy.WaiterProxy"
# “方法体退出”插入的代理方法名称
insertExitMethodName: "insertMethodExit"
# “方法体退出”需要在方法体进入插入的目标方法列表
targetExitMethodList:
- "makeTea##(I)V"