全部产品

Android SDK接入(Maven集成)

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

说明
  • 性能分析服务的Android SDK接入可采用Maven集成和本地集成2种方式添加依赖。推荐使用Maven集成方式添加依赖,可大幅简化接入操作。

  • 如需使用本地集成方式添加依赖,操作方法参见:Android SDK 接入(本地集成)

前提条件

  • 已创建用于性能分析服务的工作空间和应用。具体操作参见:移动研发平台 EMAS > 创建工作空间和应用

  • 已设置上报网络数据的URL过滤。具体操作参见:设置URL过滤

  • 已下载应用的配置文件。具体操作参见:移动研发平台 EMAS > 下载配置文件

    Android配置文件:aliyun-emas-services.json

使用限制

  • 仅支持Android 4.2及以上版本。

  • 仅支持arm64-v8a/armeabi-v7a/x86/x86_64架构。

  • 仅支持gradle 3.0.0及以上版本。

  • 仅支持以下网络库版本:

    • okhttp2:2.0.0-2.7.5

    • okhttp3: 3.0.0-3.14.7

    • okhttp4: 4.0.0-4.8.1

接入概述

  1. 准备:获取应用信息AppKey/AppSecret/PackageName;获取公钥。

  2. 应用插件:添加插件依赖;应用插件。

  3. 添加依赖:采用Maven方式集成SDK。SDK功能变更历史参见:SDK版本说明

  4. 接入服务:添加自定义Application,以及SDK初始化代码。

  5. 混淆配置:如App对代码进行乱序混淆,则修改混淆配置文件。

  6. 编译:常见编译问题排查。

准备

获取应用信息AppKey/AppSecret/PackageName

1:打开移动研发平台 EMAS控制台 > 工作空间概览页面。

2:在我的应用区域,单击Android应用图标,打开指定Android应用的编辑配置页面。

3:在编辑配置页面,查询指定应用的AppKey/AppSecret/PackageName

各参数说明如下:

参数

说明

AppKey

用于唯一标识App。由系统生成,8位数字。

AppSecret

用于认证App。由系统生成,32位字符串。

PackageName

用于标识App的名称。由用户自定义。

截屏2021-02-08 下午3

获取公钥

4:在编辑配置页面,单击下载Android配置按钮,下载指定应用的配置文件:aliyun-emas-services.json

5:打开Android配置文件,查询appmonitor.rsaSecret字段内容,即为性能分析公钥。

1605495739150-3cef02d5-dc19-466d-b89b-3c7bd4ed865f
注意

  • 为避免在日志中泄漏参数appkey/appsecret/rsaSecret或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。

  • 由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置appkey/appsecret/rsaSecret参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。

应用插件

1:在build.gradle项目文件的buildscript{}代码段添加插件依赖。

注意

此处仅添加插件依赖,应用依赖须添加至build.gradle项目文件的dependencies{}代码段。具体说明参见:添加依赖

buildscript {
    repositories {
        google()
        jcenter()
    }
dependencies {
    classpath 'com.android.tools.build:gradle:${gradle-version}'//配置项
    classpath 'com.aliyun.ams:alicloud-android-networkmonitor-plugin:1.2.0-open'
}

配置说明如下:

配置项

说明

gradle-version

用于指定实际开发环境的gradle版本。

【示例】classpath 'com.android.tools.build:gradle:4.8.1'

2:在build.gradle项目文件中添加代码段应用插件。

apply plugin: 'com.aliyun.emas.networkmonitor'

添加依赖

build.gradle项目文件中:

1:在repositories{}代码段添加阿里云Maven仓库地址。

repositories {
    maven { url "http://maven.aliyun.com/nexus/content/repositories/releases" }
}

2:在android{}代码段设置应用包名和.so库。

android {
    ......
    defaultConfig {
        applicationId "com.xxx.xxx" //配置项
        ......
        ndk {
            //选择要添加的对应cpu类型的.so库,当前支持四种
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' //配置项
        }
        ......
    }
    ......
}

配置说明如下:

参数

说明

applicationId

用于指定App的PackageName。

【数据类型】字符串

【获取方式】参见:前提条件

【是否必选】是

【是否可为空】否

【默认值】无

ndk

用于指定App的架构,添加对应CPU类型的.so库。

【数据类型】枚举型

【取值范围】

  • arm64-v8a

  • armeabi-v7a

  • x86

  • x86_64

【是否必选】是

【是否可为空】否

【默认值】无

【大小写敏感】否

3:在dependencies{}代码段添加SDK依赖。

dependencies {
    ......
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "com.squareup.okhttp3:okhttp:${okhttp3version}"//配置项

    //线上测试
    implementation 'com.aliyun.ams:alicloud-android-ha-adapter:1.1.5.0-open'
    implementation 'com.aliyun.ams:alicloud-android-apm:1.0.10.0-open'
    ......
}

配置说明如下:

参数

说明

okhttp3version

用于设置本地开发环境可支持的网络库版本。

【示例】implementation "com.squareup.okhttp3:okhttp:4.8.1"

接入服务

1、定义Application类,编写onCreate方法,启动服务。

public class MyApplication extends Application {
        @Override
        public void 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; //配置项
             config.rsaPublicKey = "xxxxxxx"; //配置项
             AliHaAdapter.getInstance().addPlugin(Plugin.apm);
             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

【是否必选】否

【是否可为空】是

【默认值】false

rsaPublicKey

用于指定性能分析公钥。

【数据类型】字符串

【获取方式】参见:准备

【是否必选】是

【是否可为空】否

【默认值】无

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>

混淆配置

如App对代码进行乱序混淆,则在混淆配置文件中添加代码段:

-keep class com.taobao.monitor.impl.**{*;}
-keep class com.taobao.monitor.adapter.**{*;}
-keep class com.taobao.application.common.**{*;}
-keep class com.facebook.drawee.generic.RootDrawable{*;}
-keep class com.facebook.drawee.drawable.FadeDrawable{*;}
-keep class androidx.fragment.app.Fragment{*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

编译

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

样例代码

性能分析服务Android SDK接入工程样例参见:Demo工程

功能验证

Android SDK接入操作完成后,可操作App,查看性能分析服务控制台显示数据,进行功能验证。

1:手机端:启动App。(2分钟后)控制台:查看概览页签的启动速度是否显示数据。

2:手机端:在App中跳转几个页面。(2分钟后)控制台:查看概览页签的加载时间是否显示数据。

说明

数据从App采集到控制台显示,存在大约2分钟延迟。

如数据显示正常,则Android SDK接入成功;

否则,可能的原因是:SDK接入失败、SDK未获取数据、数据发送失败、后端问题,请联系技术支持解决。

SDK版本说明

版本号

发布日期

变更说明

1.0.10.0-open

2020/05/13

代码优化。

1.0.8.2-open

2020/12/18

代码优化。

1.0.8.1-open

2020/11/24

优化编译构建问题。

1.0.8.0-open

2020/11/12

新增网络异常分析功能。

其他历史版本。