Android SDK接入(Maven集成)

本文介绍如何通过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架构。

操作步骤

  1. 添加依赖

    在build.gradle项目文件中进行以下操作:

    1. 添加阿里云Maven仓库地址。

      repositories {
          maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
      }
    2. android{}代码段修改默认配置项。

      android {
          ......
          defaultConfig {
              applicationId "com.xxx.xxx"
              ......
              ndk {
                  //选择要添加的对应cpu类型的.so库,当前支持四种
                  abiFilters 'arm64-v8a',  'armeabi-v7a', 'x86', 'x86_64'
              }
              ......
          }
          ......
      }
    3. 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'
          ......
      }
  2. 接入服务

    1. 定义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加固后再发布上线。

    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>
  3. 添加高级设置

    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接口说明

  4. 数据采集

    您需要在满足合规要求下尽可能早的进行信息采集设置,默认是采集设备信息、系统信息和网络信息。

    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

    不采集网络信息

    包括:运营商、接入点信息、网络类型

  5. 混淆配置

    如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
  6. 编译

    如同时使用其他阿里云产品,可能会因为依赖中存在UTDID冲突,造成编译失败,请参见解决。

  7. 接入验证

    Android SDK接入操作完成后,需进行功能验证。

    1. 编写测试代码,模拟/触发移动端崩溃。例如:

      throw new NullPointerException();
    2. 重启移动端,大概2分钟后在控制台查看是否显示崩溃信息。

      说明

      崩溃数据从采集到上传到控制台显示,存在大约2~3分钟延迟。

      • 显示崩溃数据:SDK接入成功

      • 数据未显示:按照c步骤进行排查

    3. 在模拟/触发崩溃及重启移动设备期间,使用Charles抓包,查看能否捕获包含https://adash-emas.cn-hangzhou.aliyuncs.com/upload的HTTP请求:

      • 捕获:崩溃信息已上报。可能原因:后端未接入;Appkey/Secret信息有误。

      • 未捕获:崩溃信息未上报。可能原因:SDK接入失败;SDK未捕获崩溃;数据发送失败。请联系技术支持解决。

样例代码

崩溃分析服务Android SDK接入工程样例请参见Demo工程