Apm plugin依赖字节基础库ByteX,ByteX当前还不兼容AGP7.2以上的版本。
如果业务使用AGP不兼容版本,可以尝试降低成兼容版本:
升级到最新版本(最低1.3.2版本),在gradle.properties配置如下:
编译失败:使用ApmPlugin出现编译异常Failed to resolve class module-info.class
升级到最新版本(最低1.3.2版本),在gradle.properties配置如下:
编译失败:This feature requires ASM7
在gradle.properties中添加:
编译失败:java.lang.IllegalStateException: was resolved from a thread not managed by Gradle.
在gradle.properties配置如下:
以腾讯云为例:
腾讯云有强类型判断,插桩后上传视频有异常日志。可以配置腾讯包名的插桩黑名单:
编译失败:ArrayIndexOutOfBoundsException Caused by: java.lang.RuntimeException: Failed to resolve class XXX
对于这种crash,主要是由于ASM在处理某些class文件时抛了异常。由于ByteX是强制抛出所有构建异常的,所以要过滤这些异常,需要额外地配置白名单,不做修改原始输出。
- 在ByteX的打包日志里找到具体是哪些类处理出错。
- 日志文件一般在app/build/ByteX目录里。
- 在项目的根目录创建一个名为bytex_whitelist.txt的文件,文件内容是多条正则表达式(多条表达式之间用回车换行符来分隔),用来过滤ASM处理报错的class文件。
- 例如,项目里的异常类a/a/a/a/a.class可以配置为a/a/a/a/+。
- 在项目的gradle.properties文件里,添加属性:bytex.globalIgnoreClassList=bytex_whitelist.txt。属性内容就是白名单文件相对于项目根目录的相对路径。
编译失败:apm plugin插件和业务已有插件冲突
如果apm plugin异常,可以把apm plugin放在第一个行首先编译处理:
如果第三方插件异常,可以把apm plugin放在最后一行: