本文介绍如何通过Maven集成方式添加依赖接入崩溃分析服务的Android SDK。
崩溃分析服务的Android SDK接入可采用Maven集成和本地集成2种方式添加依赖。推荐使用Maven集成方式添加依赖,可大幅简化接入操作。
如需使用本地集成方式添加依赖,操作方法请参见Android SDK接入(本地集成)。
前提条件
已获取AppKey、AppSecret,获取方式请参见下载配置文件。
使用限制
推荐使用Gradle管理依赖的Android Studio项目。
仅支持Android 4.0及以上版本。
仅支持arm64-v8a//armeabi-v7a/x86/x86_64架构。
操作步骤
添加依赖
在build.gradle项目文件中进行以下操作:
添加阿里云Maven仓库地址。
repositories { maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" } }
在
android{}
代码段修改默认配置项。android { ...... defaultConfig { applicationId "com.xxx.xxx" ...... ndk { //选择要添加的对应cpu类型的.so库,当前支持四种 abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' } ...... } ...... }
在
dependencies{}
代码段添加SDK依赖。dependencies { ...... implementation 'com.aliyun.ams:alicloud-android-ha-adapter:1.2.4.0-open' implementation 'com.aliyun.ams:alicloud-android-ha-crashreporter:2.1.0' ...... }
接入服务
定义Application类,编写onCreate方法,启动服务。
说明建议将崩溃分析服务的SDK初始化代码段,放在所有业务代码之前,确保App在启动时,优先加载崩溃分析服务,保障后续崩溃的信息,可以即时获取并上传至控制台。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); initHa(); } private void initHa() { AliHaConfig config = new AliHaConfig(); config.appKey = "xxxxxxxx"; config.appVersion = "x.xx"; config.appSecret = "xxxxxxxxxxxx"; config.channel = "mqc_test"; config.userNick = null; config.application = this; config.context = getApplicationContext(); config.isAliyunos = false; //启动CrashReporter AliHaAdapter.getInstance().addPlugin(Plugin.crashreporter); AliHaAdapter.getInstance().start(config); } }
参数
说明
appKey
用于指定App的AppKey。
【数据类型】字符串
【是否必选】是
【是否可为空】否
【默认值】无
appVersion
用于设置App的版本号。
【数据类型】字符串
【格式要求】自定义
【取值范围】任意长度。
说明该参数值将在控制台显示为下拉列表选项,建议短小凝练。
【是否必选】是
【是否可为空】否
【默认值】无
【大小写敏感】是。例如,vx.x和Vx.x不是一个版本。
【字符类型】英文大小写、数字。
说明不支持中文字符、特殊字符。
appSecret
用于指定App的AppSecret。
【数据类型】字符串
【是否必选】是
【是否可为空】否
【默认值】无
channel
用于设置渠道标识,上报至服务端,进行渠道区分。
【数据类型】字符串
【取值范围】任意长度
【是否必选】否
【是否可为空】是
【默认值】无
【字符类型】英文大小写、数字。
说明不支持中文字符、特殊字符。
userNick
用于设置用户昵称,上报至服务端,进行用户区分。后续可能依据该参数,进行数据检索。
【数据类型】字符串
【取值范围】任意长度
【是否必选】否
【是否可为空】是
【默认值】无
【字符类型】英文大小写、数字。
说明不支持中文字符、特殊字符。
【命名规范】自定义
application
用于指定本应用。
重要不能指向其他应用。
【数据类型】对象
【是否必选】是
【是否可为空】否
【默认值】无
context
用于指定App的上下文对象,设置
getApplicationContext();
即可。【数据类型】对象
【是否必选】是
【是否可为空】否
【默认值】无
isAliyunos
用于判断App所在平台是否为YunOS。
【数据类型】布尔型
【取值范围】false/true
【是否必选】否
【是否可为空】是
【默认值】fal
重要为避免在日志中泄漏参数
appkey
/appsecret
或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置
appkey
/appsecret
参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。
在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提供接口,用于上报自定义信息/错误。
//上报自定义信息 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")); //配置项:自定义错误
具体说明请参见Android SDK接口说明。
数据采集
您需要在满足合规要求下尽可能早的进行信息采集设置,默认是采集设备信息、系统信息和网络信息。
AliHaConfig config = new AliHaConfig(); //可以根据合规要求禁止采集设备信息、系统信息和网络信息 config.noCollectionDataType = AliHaConfig.NO_DEVICE_DATA | AliHaConfig.NO_OS_DATA | AliHaConfig.NO_NETWORK_DATA;
采集参数:
敏感数据类型
说明
信息字段详情
NO_DEVICE_DATA
不采集设备信息
包括:品牌(Build.BRAND)、型号(Build.MODEL)、屏幕分辨率、CPU信息(Build.CPU_ABI)、硬件名称(Build.HARDWARE)
NO_OS_DATA
不采集系统信息
包括:语言、系统版本(Build.VERSION.RELEASE、Build.VERSION.SDK_INT)、系统编译唯一标识(Build.FINGERPRINT)
NO_NETWORK_DATA
不采集网络信息
包括:运营商、接入点信息、网络类型
混淆配置
如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
编译
接入验证
Android SDK接入操作完成后,需进行功能验证。
编写测试代码,模拟/触发移动端崩溃。例如:
throw new NullPointerException();
重启移动端,大概2分钟后在控制台查看是否显示崩溃信息。
说明崩溃数据从采集到上传到控制台显示,存在大约2~3分钟延迟。
显示崩溃数据:SDK接入成功
数据未显示:按照c步骤进行排查
在模拟/触发崩溃及重启移动设备期间,使用Charles抓包,查看能否捕获包含
https://adash-emas.cn-hangzhou.aliyuncs.com/upload
的HTTP请求:捕获:崩溃信息已上报。可能原因:后端未接入;Appkey/Secret信息有误。
未捕获:崩溃信息未上报。可能原因:SDK接入失败;SDK未捕获崩溃;数据发送失败。请联系技术支持解决。
样例代码
崩溃分析服务Android SDK接入工程样例请参见Demo工程。