Skip to content

Latest commit

 

History

History
179 lines (151 loc) · 6.01 KB

接入指南.md

File metadata and controls

179 lines (151 loc) · 6.01 KB

接入指南

添加依赖

在根项目的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"