问题描述
APMInsight SDK 为了采集应用启动数据,会在编译时对 Application 类的 attachBaseContext() 及 onCreate() 方法嵌码。而阿里 Hotfix 补丁工具要求Application 不能调用非 Android 官方 API,导致生成补丁失败。
解决方案
分析:
插件配置:
如果使用了阿里的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即获取启动数据成功。