本文介绍如何通过本地集成方式添加依赖接入崩溃分析服务的Android SDK。

说明
  • 崩溃分析服务的Android SDK接入可采用Maven集成和本地集成2种方式添加依赖。推荐使用Maven集成方式添加依赖,可大幅简化接入操作。
  • 如需使用Maven集成方式添加依赖,操作方法参见Android SDK接入(Maven集成)

样例代码

Demo工程

使用限制

  • 仅支持Android 4.0及以上版本。
  • 仅支持arm64-v8a、armeabi-v7a、x86和x86_64架构。

步骤一:创建监控任务

  1. 登录ARMS控制台,在左侧导航栏中单击App监控
  2. App监控页面,单击右上角的创建App监控任务
  3. 接入中心面板,单击Android App
    接入App监控
  4. 在接入面板的Step 1区域输入App名称PackageName,选择App的平台,然后单击创建应用
    创建APP监控任务
  5. Step 2区域,根据页面提示下载aliyun-emas-services.json文件。
    查看配置
  6. 打开aliyun-emas-services.json文件,获取emas.appKeyemas.appSecretemas.packageName内容。
    aliyun-emas-services
    说明
    • 为避免在日志中泄漏参数appkey、appsecret或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。
    • 由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置appkey、appsecret参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。具体操作,请参见(可选)步骤五:混淆配置

步骤二:添加依赖

  1. 下载SDK,并将SDK包内所有文件拷贝至项目的libs目录下。
  2. 在项目级build.gradle文件中,添加本地SDK文件目录地址。
    repositories {
       flatDir {
           dirs 'libs'
       }
    }
  3. 在应用级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')

步骤三:接入服务

  1. 定义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);
       }
    }
  2. 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接入操作完成后,需进行功能验证。

  1. 编写测试代码,模拟、触发移动端崩溃。例如:
    throw new NullPointerException();
  2. 重启移动端,大概2分钟后在控制台查看是否显示崩溃信息。
    说明 数据从App采集到控制台显示,存在大约2分钟延迟。
    • 显示崩溃数据:SDK接入成功。
    • 数据未显示:按照步骤步骤3进行排查。
  3. 在模拟、触发崩溃及重启移动设备期间,使用Charles抓包,查看能否捕获包含https://adash-emas.cn-hangzhou.aliyuncs.com/upload的HTTP请求:
    • 捕获:崩溃信息已上报。可能原因:后端未接入、Appkey/Secret信息有误。
    • 未捕获:崩溃信息未上报。可能原因:SDK接入失败、SDK未捕获崩溃、数据发送失败,请联系技术支持