本文介绍如何通过本地集成方式添加依赖接入崩溃分析服务的Android SDK。
说明
- 崩溃分析服务的Android SDK接入可采用Maven集成和本地集成2种方式添加依赖。推荐使用Maven集成方式添加依赖,可大幅简化接入操作。
- 如需使用Maven集成方式添加依赖,操作方法参见Android SDK接入(Maven集成)。
样例代码
使用限制
- 仅支持Android 4.0及以上版本。
- 仅支持arm64-v8a、armeabi-v7a、x86和x86_64架构。
步骤一:创建监控任务
- 登录ARMS控制台,在左侧导航栏中单击App监控。
- 在App监控页面,单击右上角的创建App监控任务。
- 在接入中心面板,单击Android App。
- 在接入面板的Step 1区域输入App名称和PackageName,选择App的平台,然后单击创建应用。
- 在Step 2区域,根据页面提示下载aliyun-emas-services.json文件。
- 打开aliyun-emas-services.json文件,获取
emas.appKey
、emas.appSecret
和emas.packageName
内容。说明- 为避免在日志中泄漏参数appkey、appsecret或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。
- 由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置appkey、appsecret参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。具体操作,请参见(可选)步骤五:混淆配置。
步骤二:添加依赖
- 下载SDK,并将SDK包内所有文件拷贝至项目的libs目录下。
- 在项目级build.gradle文件中,添加本地SDK文件目录地址。
repositories { flatDir { dirs 'libs' } }
- 在应用级build.gradle文件的
dependencies{}
代码段中添加SDK依赖。//1、本地JAR库引入 compile fileTree(include: ['*.jar'], dir: 'libs') //2、公共库 compile (name: 'alicloud-android-ha-adapter-1.1.5.1-open', ext: 'aar') compile (name: 'alicloud-android-ha-core-1.1.0.6.1-open', ext: 'aar') compile (name: 'alicloud-android-ha-protocol-1.1.2.0-open', ext: 'aar') compile (name: 'alicloud-android-ha-tbrest-1.1.1.0-open', ext: 'aar') compile (name: 'alicloud-android-utdid-2.5.1-proguard', ext: 'jar') compile (name: 'fastjson-2.0.9.android', ext: 'jar') //3、崩溃分析 compile (name: 'alicloud-android-ha-crashreporter-1.2.5', ext: 'aar') compile (name: 'alicloud-android-ha-watch-1.1.0.6.1-open', ext: 'aar') compile (name: 'alicloud-android-ha-bizerrorreporter-1.1.0.9-open', ext: 'aar') compile (name: 'alicloud-android-ha-olympic-1.0.4.38', ext: 'aar')
步骤三:接入服务
- 定义Application类,编写onCreate方法,启动服务。说明 建议将崩溃分析服务的SDK初始化代码段,放在所有业务代码之前,确保App在启动时,优先加载崩溃分析服务,保障后续崩溃的信息,可以即时获取并上传至控制台。
public class MyApplication extends Application { @Override public void onCreate() { initHa(); } private void initHa() { AliHaConfig config = new AliHaConfig(); config.appKey = "xxxxxxxx"; //替换为步骤一中获取的AppKey。 config.appVersion = "x.xx"; //设置App的版本号。 config.appSecret = "xxxxxxxxxxxx"; //替换为步骤一中获取的AppSecret。 config.channel = "mqc_test"; //设置渠道标识,上报至服务端,进行渠道区分。 config.userNick = null; //设置用户昵称,上报至服务端,进行用户区分。后续可能依据该参数,进行数据检索。 config.application = this; config.context = getApplicationContext(); config.isAliyunos = false; //App所在平台是否为YunOS。 //启动CrashReporter AliHaAdapter.getInstance().addPlugin(Plugin.crashreporter); AliHaAdapter.getInstance().start(config); } }
- 在AndroidManifest.xml中添加代码段注册Application。
<application android:name=".MyApplication" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > </application>
步骤四:添加高级设置
Android SDK提供接口,用于上报自定义信息或错误。更多信息,请参见Android SDK接口说明。
//上报自定义信息
AliHaAdapter.getInstance().addCustomInfo("key", "value");
//按异常类型上报自定义信息
AliHaAdapter.getInstance().setErrorCallback(new ErrorCallback() {
@Override
public Map<String, String> onError(ErrorInfo callbackInfo) {
Map<String, String> infos = new HashMap<>();
infos.put("key", "value");
return infos;
}
});
//上报自定义错误
AliHaAdapter.getInstance().reportCustomError(new RuntimeException("custom error"));
(可选)步骤五:混淆配置
如需App对代码进行乱序混淆,则在混淆配置文件中添加以下代码段:
#keep crashreporter
-keep class com.alibaba.motu.crashreporter.**{ *;}
-keep class com.uc.crashsdk.**{*;}
-keep interface com.ut.mini.crashhandler.*{*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
步骤六:编译
如同时使用其他阿里云产品,可能会因为依赖中存在UTDID冲突,造成编译失败。解决办法,请参见SDK UTDID冲突解决方案。
功能验证
Android SDK接入操作完成后,需进行功能验证。
- 编写测试代码,模拟、触发移动端崩溃。例如:
throw new NullPointerException();
- 重启移动端,大概2分钟后在控制台查看是否显示崩溃信息。说明 数据从App采集到控制台显示,存在大约2分钟延迟。
- 显示崩溃数据:SDK接入成功。
- 数据未显示:按照步骤3进行排查。
- 在模拟、触发崩溃及重启移动设备期间,使用Charles抓包,查看能否捕获包含
https://adash-emas.cn-hangzhou.aliyuncs.com/upload
的HTTP请求:- 捕获:崩溃信息已上报。可能原因:后端未接入、Appkey/Secret信息有误。
- 未捕获:崩溃信息未上报。可能原因:SDK接入失败、SDK未捕获崩溃、数据发送失败,请联系技术支持。