You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
Android 端监控
Apmplus plugin 编译异常
复制全文
下载 pdf
Apmplus plugin 编译异常
AGP兼容:支持的Gradle版本​
Apm plugin依赖字节基础库ByteX,ByteX当前还不兼容AGP7.2以上的版本。​
如果业务使用AGP不兼容版本,可以尝试降低成兼容版本:​
​
AGP插件版本​
classpath 'com.android.tools.build:gradle:x.x.x'​
所需的Gradle版本​
distributionUrl=gradle/gradle-y.y-all.zip​
测试兼容性​
3.0.0+​
4.1+​
yes​
3.1.0+​
4.4+​
yes​
3.2.0 - 3.2.1​
4.6+​
yes​
3.3.0 - 3.3.3​
4.10.1+​
yes​
3.4.0 - 3.4.3​
5.1.1+​
yes​
3.5.0 - 3.5.4​
5.4.1+​
yes​
3.6.0 - 3.6.4​
5.6.4+​
yes​
4.0.0+​
6.1.1+​
yes​
4.1.0+​
6.5+​
yes​
4.2.0+​
6.7.1+​
yes​
7.0.2​
7.1.1​
yes​
​
您也可以直接使用非插桩方式接入,具体请参见如何根据非插桩方案接入监控能力?。​
编译失败:使用ApmPlugin出现卡死​
报错示例​
​图片​​
解决方案​
升级到最新版本(最低1.3.2版本),在gradle.properties配置如下:​
​
bytex.forbidUseLenientMutationDuringGetArtifact=true​
​
编译失败:使用ApmPlugin出现编译异常Failed to resolve class module-info.class​
异常信息​
​
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: Failed to resolve class module-info.class​
​
解决方案​
升级到最新版本(最低1.3.2版本),在gradle.properties配置如下:​
​
bytex.enableDuplicateClassCheck=false​
​
编译失败:This feature requires ASM7​
解决方案​
在gradle.properties中添加:​
​
bytex.ASM_API=ASM7​
​
编译失败:java.lang.IllegalStateException: was resolved from a thread not managed by Gradle.​
报错示例​
​图片​​
解决方案​
在gradle.properties配置如下:​
​
bytex.forbidUseLenientMutationDuringGetArtifact=true​
​
编译失败:网络请求强制类型判断异常​
报错示例​
​图片​​
解决方案​
以腾讯云为例:​
腾讯云有强类型判断,插桩后上传视频有异常日志。可以配置腾讯包名的插桩黑名单:​
​
ApmPlugin {​
// 只对白名单下的包进行插桩​
whiteList = [​
"com"​
]​
​
//黑名单包下类不进行插桩,可以配置不插桩的包名和类名​
blackList = [​
"com.tencent"​
]​
}​
​
编译失败:ArrayIndexOutOfBoundsException Caused by: java.lang.RuntimeException: Failed to resolve class XXX​
报错示例​
​
Caused by: java.lang.RuntimeException: Failed to resolve class a/a/a/a/a.class[​
transform input:​
/E:\a_e\bbb\libs\read.jar!a/a/a/a/a.class​
project input:​
/E:\a_e\bbb\libs\ read.jar!a/a/a/a/a.class​
aar input:not found]​
at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:113)​
at com.ss.android.ugc.bytex.transformer.processor.ClassFileProcessor.process(ClassFileProcessor.java:27)​
Caused by: java.lang.ArrayIndexOutOfBoundsException​
​
解决方案​
对于这种crash,主要是由于ASM在处理某些class文件时抛了异常。由于ByteX是强制抛出所有构建异常的,所以要过滤这些异常,需要额外地配置白名单,不做修改原始输出。​
  1. 在ByteX的打包日志里找到具体是哪些类处理出错。​
  • 日志文件一般在app/build/ByteX目录里。​
  1. 在项目的根目录创建一个名为bytex_whitelist.txt的文件,文件内容是多条正则表达式(多条表达式之间用回车换行符来分隔),用来过滤ASM处理报错的class文件。​
  • 例如,项目里的异常类a/a/a/a/a.class可以配置为a/a/a/a/+。​
  1. 在项目的gradle.properties文件里,添加属性:bytex.globalIgnoreClassList=bytex_whitelist.txt。属性内容就是白名单文件相对于项目根目录的相对路径。​
编译失败:apm plugin插件和业务已有插件冲突​
如果apm plugin异常,可以把apm plugin放在第一个行首先编译处理:​
​
apply plugin: 'com.android.application'​
apply plugin: 'apm-plugin'//放到application后面第一个​
apply plugin: 'xxxx'​
​
如果第三方插件异常,可以把apm plugin放在最后一行:​
​
apply plugin: 'com.android.application'​
apply plugin: 'xxxx'​
apply plugin: 'apm-plugin'//放到最后一个处理字节码​
​
插桩是为了方便业务接入网络、启动功能。如果依然无法解决,可以通过非插桩的方案接入监控能力。具体请参见如何根据非插桩方案接入监控能力?。​
​
​
最近更新时间:2026.02.10 19:56:18
这个页面对您有帮助吗?
有用
有用
无用
无用