tencent cloud

文档反馈

集成和初始化

最后更新时间:2024-05-24 11:56:45

    操作场景

    本文指导您使用 Android SDK 的集成与初始化。

    操作步骤

    步骤一:Gradle 集成

    1. settings.gradle 中添加 maven 仓库源。
    
    
    
    参考代码:
    pluginManagement {
    ...
    repositories {
    ...
    // 加入下面内容
    maven { url 'https://qapm-maven.pkg.coding.net/repository/qapm_sdk/android_release/' }
    }
    }
    dependencyResolutionManagement {
    ...
    repositories {
    ...
    // 加入下面内容
    maven { url 'https://qapm-maven.pkg.coding.net/repository/qapm_sdk/android_release/' }
    }
    }
    注意:
    如果您的 gradle 版本低于 7.0,请在 project 的 build.gradle 添加 maven 仓库源,如下所示:
    
    
    
    2. project 的 build.gradle 文件下增加插件的依赖。
    
    
    参考代码:
    buildscript {
    ...
    dependencies {
    ...
    // 加入下面的内容
    classpath 'com.tencent.qapmplugin:qapm-plugin:3.1'
    ...
    }
    }
    注意:
    如果您的 gradle 版本小于 7.4,则将插件版本改为 2.39。
    3. app 的 build.gradle 文件下增加以下代码:
    
    
    
    参考代码:
    plugins {
    ...
    id('qapm-plugin') //添加插件
    ...
    }
    ...
    preBuild.dependsOn(UUIDGenerator) //生成唯一标识,用于后续堆栈翻译
    ...
    dependencies {
    ...
    //添加qapmsdk依赖
    implementation 'com.tencent.qapm:qapmsdk:5.4.6-pub'
    ...
    }
    4. 请通过以下内容检查是否需要执行此步骤。
    请在 Application 所在的类中输入 attachBaseContext,检查是否有这个的重写方法,如有重写方法则忽略该步骤,如没有请执行下一步。
    
    
    
    请将 Application 的包名路径添加进以下配置,如下所示:
    
    
    
    参考代码:
    QAPMPluginConfig {
    // 可选,默认为空,请在Application所在的类中输入attachBaseContext,看有没有这个的重写方法,如果没有则需要配置该项,如下图所示就是无需配置该项的校验
    // tinkerApplication = 'com/tencent/qapm/demoApplication'
    }
    5. 此时您可以尝试进行编译。编译相关的 FAQ 可以查看此步骤。
    Q1:如果编译时出现 “feature is disabled” 的错误,如下:
    
    
    
    A1: 这是因为插件需要动态在 BuildConfig 插入属性,请在 app 模块的 build.gradle 文件下增加以下代码。
    
    
    
    参考代码:
    android {
    ...
    // 加入下面内容
    buildFeatures {
    ...
    buildConfig true
    }
    ...
    }
    Q2: 如果编译时出现 “类冲突” 的错误,如下:
    
    
    
    A2: 这是由于 qapm 与您的工程使用了 android 不同的 support 库,这里请在依赖的时候移除掉qapm 的 android.support 库,如下:
    
    
    
    参考代码:
    dependencies {
    ...
    implementation ('com.tencent.qapm:qapmsdk:5.4.6-pub') {
    // 加入下面内容
    exclude group: 'com.android.support'
    }
    ...
    }
    注意:
    如果未使用 qapm-plugin 插件,则会影响启动、网络的监控。

    步骤二:参数配置

    1. 在 AndroidManifest.xml 中添加以下权限。
    <!--上报信息所需-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--采集信息所需-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    2. 为了避免混淆 SDK,在 App 的 proguard-rules.pro 文件中增加以下配置:
    -keep class com.tencent.qapmsdk.**{*;}
    # 如需要网络监控,请确保okhttp3不被混淆
    -keep class okhttp3.**{*;}

    步骤三:初始化 SDK

    1. 登录 腾讯云可观测平台 控制台,在终端性能监控页面 ,选择 应用管理 > 应用设置 后,获取 Appkey(上报 ID)。
    
    
    
    2. 拷贝下面代码,并修改其中部分字段。下列项均是必需的接口设置,其余接口配置请参考初始化的接口分析(建议在 Application 中初始化 QAPM)。
    // 设置手机型号和设备ID。
    // 需要传入设备的标识,任意字符串。deviceId(必需!!)
    // deviceId可以用来开启白名单,避免数据被抽样上报(崩溃和启动以外的数据抽样率为0.1%)
    QAPM.setProperty(QAPM.PropertyKeyDeviceId, "设备的标识");
    // 需要传入手机型号(必需!!)
    QAPM.setProperty(QAPM.PropertyKeyModel, "填写手机型号");
    
    // 设置Application(必需)
    QAPM.setProperty(QAPM.PropertyKeyAppInstance, getApplication());
    // 设置AppKey(必需,用于区分上报的产品,该值由终端性能监控的产品配置页面获取,可参考上一步骤 )
    QAPM.setProperty(QAPM.PropertyKeyAppId, "YourAppKey");
    // 设置产品版本,用于后台检索字段(必需)
    QAPM.setProperty(QAPM.PropertyKeyAppVersion, "YourApp Version");
    // 设置UUID,用于拉取被混淆堆栈的mapping (必需,若使用了QAPM符号表上传插件,可以直接使用该变量)。
    // 如有使用qapmplugin插件,则该变量会在build时生成,报错信息可不用关注。如无使用则需要自行传入,请确保使用UUID格式且一个apk仅对应一个uuid
    QAPM.setProperty(QAPM.PropertyKeySymbolId, BuildConfig.QAPM_UUID);
    // 设置用户ID,任意字符串,用于后台检索字段(必需)
    // userId可以用来开启白名单,避免数据被抽样上报(崩溃和启动以外的数据抽样率为0.1%)
    QAPM.setProperty(QAPM.PropertyKeyUserId, "123456");
    // 设置Log等级,(可选),线上版本请设置成QAPM.LevelOff或者 QAPM.LevelWarn
    QAPM.setProperty(QAPM.PropertyKeyLogLevel, QAPM.LevelInfo);
    // 设置QAPM的外网上报域名(必需)。国内站:https://app.rumt-zh.com 国际站:https://app.rumt-sg.com
    QAPM.setProperty(QAPM.PropertyKeyHost,"https://app.rumt-zh.com");
    QAPM.setProperty(QAPM.PropertyKeyHost,"https://app.rumt-sg.com");
    // 启动QAPM
    QAPM.beginScene(QAPM.SCENE_ALL, QAPM.ModeStable);
    说明:
    AppKey 可参考步骤三-步骤1,在 终端性能监控 > 应用管理 > 应用设置 页面获取。
    崩溃和启动数据是全量上报,其他数据因为数据数目过多,采取抽样上报,抽样率为0.1%(千分之一)。如果需要全量上报,可以开启白名单,App 将会在下次启动时改变抽样率。
    可以将设置好 userId 或者 deviceId 通过 应用管理 页面添加白名单里,开启白名单。
    多个进程需要各自初始化 QAPM。

    步骤四:接入验证

    1. 若打印以下日志,代表该用户未被抽样命中,需重新设置下抽样率:
    
    
    
    参见 TAG : QAPM_manager_QAPMLauncher
    2. 若打印以下日志,则代表初步接入成功,可以验证数据上报/尝试开启高级功能:
    
    
    
    参见 TAG : QAPM_manager_QAPMPluginManager

    初始化的接口分析

    接口名称
    参数
    参数说明
    注意事项
    public static QAPM setProperty(int key, Stringvalue)
    作用:设置 QAPM 的相关参数
    key
    必填。需要设置的 Key。
    -
    QAPM.PropertyKeyLogLevel
    选填。开启日志等级(建议 Debug 版本开启 QAPM.LevelDebug,release 版本开启 QAPM.LevelWarn)。
    QAPM.PropertyNeedTranslate
    选填。堆栈是否需要翻译,这里默认是需要翻译的。如果 apk 是没有混淆的需要传入 false,否则前端可能会全部展示为 unTranslated。
    public static boolean beginScene(String sceneName, int mode)
    作用:开启监控
    sceneName
    必填。场景名。
    使用或运算的方式自定义开启性能模块,如开启 Crash 和 Anr: beginScene(“Crash&ANR”, QAPM.ModeCrash| QAPM.ModeANR)
    mode
    必填。开启的功能。
    QAPM.ModeStable
    选填。开启全部功能(建议外发版本开启。包含区间性能、crash、anr、webview 页面加载、JsError、网络)。
    QAPM.ModeWebView
    选填。开启 WebView 页面加载监控。
    QAPM.ModeJsError
    选填。开启 WebView 的 JS 异常监控。
    QAPM.ModeHTTPInWeb
    选填。开启 WebView 的网络监控。
    QAPM.ModeHTTP
    选填。开启网络监控。
    public static boolean endScene(String sceneName, long mode)
    作用:结束监控(只针对掉帧和区间性能采集有效)
    sceneName
    必填。需要关掉的场景名(与 beginScene 的要相对应)。
    -
    QAPM.ModeDropFrame
    选填。关闭掉帧监控。
    QAPM.ModeResource
    选填。关闭区间性能监控。

    其他问题

    说明:
    通过 qapm 插件编译打包 App 时,App 需要一个 uuid 作为构建 id,如果项目目录下存在 qapm.properties 文件,并且文件里 qapm_uuid 属性的值存在,该值将被作为构建 id,否则插件会随机生成一个构建 id。
    qapm-plugin 2.39及之前版本在编译 App 的过程中会报 IO 错误:java.io.FileNotFoundException,qapm.properties (No such file or directory)
    
    
    
    该报错仅在编译期间产生,不会影响 App 运行。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持