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

应用性能监控全链路版

复制全文
下载 pdf
Android 端监控
编译失败:阿里 Sophix 打热修复包失败
复制全文
下载 pdf
编译失败:阿里 Sophix 打热修复包失败
问题描述​
APMInsight SDK 为了采集应用启动数据,会在编译时对 Application 类的 attachBaseContext() 及 onCreate() 方法嵌码。而阿里 Hotfix 补丁工具要求Application 不能调用非 Android 官方 API,导致生成补丁失败。​
​图片​​
解决方案​
分析:​
  1. 为何会往阿里的类里面插桩?​
  1. 阿里热修:阿里热修通过自己的SophixStubApplication代理了业务的Application类,启动监控会往真实的Application里面插桩,所以会修改SophixStubApplication类的代码。​
  1. 如何不往阿里的类插装?又可以实现启动监控?​
  1. 配置阿里SophixStubApplication类黑名单,配置自己的Application黑名单。​
  1. 手动往自己的application里面添加启动监控的代码​
插件配置:​
如果使用了阿里的sophix热修复,需要做如下配置。​
​
ApmPlugin{​
blackList = [​
"com.apm.app.SophixStubApplication",//阿里热修的Application​
"com.apm.app.MyApp"//自己的Application​
]​
}​
​
启动Application配置:​
在自己的Application里面配置启动监控的代码。​
​
public class App extends Application {​
​
public App(){​
super();​
//监控App构造函数​
AppAgent.onTrace(AppAgent.CONSTRUCT,true);​
AppAgent.onTrace(AppAgent.CONSTRUCT,false);​
}​
​
@Override​
protected void attachBaseContext(Context base) {​
//监控启动attachBaseContext()方法​
AppAgent.onTrace(AppAgent.ATTACH_BASE_CONTEXT,true);​
super.attachBaseContext(base);​
AppAgent.onTrace(AppAgent.ATTACH_BASE_CONTEXT,false);​
}​
​
@Override​
public void onCreate() {​
//监控启动onCreate()方法​
AppAgent.onTrace(AppAgent.ON_CREATE,true);​
super.onCreate();​
​
//这里可以初始化业务其他代码​
​
AppAgent.onTrace(AppAgent.ON_CREATE,false);​
}​
}​
​
​
如果找不到常量AppAgent. CONSTRUCT 可以配置​
​
public static final String CONSTRUCT = "<init>";​
public static final String ATTACH_BASE_CONTEXT = "attachBaseContext";​
public static final String ON_CREATE = "onCreate";​
​
​
验证:​
添加黑名单,添加了启动监控的代码。​
初始化设置debug模式,过滤ApmInsight可以看到Receive:StartData即获取启动数据成功。​
​
最近更新时间:2026.02.10 19:56:18
这个页面对您有帮助吗?
有用
有用
无用
无用