Android SDK 使用指南

  • Radar接入到客户端之后,是否打开采集性能数据功能,需要配合后台放量配置。
  • 因为对SDK本身对CPU、内存有一定的消耗,建议业务在试用期间尽量避免全量上,通过放量能够排查问题即可
  • 每一项指标具体的阈值都可以通过后台进行配置,建议业务根据自身应用程序的现状进行配置

1. 集成SDK

1.1. 添加仓库地址

Radar支持JCenter仓库

1.2. 集成依赖

dependencies {
    implementation "com.cosmos.radar:core:2.6.7"
}

SDK中有多个架构的SO库,有必要在gradle中配置自身应用需要的SO库,减少包大小占用

android {
    defaultConfig {
        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
}

1.2.1. 集成SDK时可能碰到的情况

  • 情况一: 如果在添加“abiFilter”之后Android Studio出现以下提示:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

解决:在项目根目录的gradle.properties文件中添加:

android.useDeprecatedNdk=true

  • 情况二: 如果在集成SDK后,编译时出现如下错误信息:

More than one file was found with OS independent path 'lib/armeabi-v7a/libc++_shared.so'

解决 修改依赖方式为如下格式:

implementation ('com.cosmos.radar:core:2.6.7') {
    exclude group: 'com.cosmos.baseutil', module: 'cpp_shared'
}

1.3. 混淆设置

为避免混淆报错,在Proguard混淆文件中增加以下配置:

# 内存泄露检测库
-keep class squareup.haha.** {*;}
-keep class com.squareup.haha.** {*;}
-dontwarn com.squareup.haha.**

# radar相关
-dontwarn com.cosmos.radar.**
-keep class com.cosmos.radar.**{*;}

2. 集成Gradle插件

如果应用有经过proguard混淆,为了方便查看堆栈信息,需要配置插件来提交mapping文件

2.1. 添加插件依赖

在Project的build.gradle下面添加编译期依赖:

buildscript {
    dependencies {
        classpath 'com.cosmos.rifle:plugin:1.5.0'
    }
}

2.2. 应用插件

Application对应的Module里的build.gradle文件中应用插件:

apply plugin: 'rifle.plugin'
rifleConfig {
    appId = "4af037b83e77345j3443io5d8d67395"          // 管理后台申请的应用APPID
    appKey = "e843359357823432hkj37b715e68cf6"         // 管理后台申请的应用APPKEY
    versionName = android.defaultConfig.versionName     // 当前应用的版本名称
}

3. 初始化

在Application的onCreate方法中,加入如下代码初始化Radar

RadarConfig.Builder builder =
        new RadarConfig.Builder(this, "后台申请的APPID")
                .kits(
                        new ANRKit(),                    // ANR
                        new LagKit(),                    // 卡顿
                        new PageLaunchTimeKit(),         // 页面启动时间
                        new MemoryLeakKit(),             // 内存泄露
                        new MemoryAlertKit()             // 内存峰值报警
                );
Radar.with(builder.build());

4. 更加丰富的配置

在初始化Radar的时候,需要通过RadarConfig.Builder来构建RadarConfig类对象,可以通过该build类的接口配置其他可选项

4.1. 打开调试日志

打开调试日志之后,性能统计SDK在采集各项数据的时候在logcat会有日志输出

builder.printDebugLog(BuildConfig.DEBUG)

4.2. 强制打开ANR检测

因为发生ANR是相对比较严重的一个性能问题,如果希望强制打开ANR检测功能,而不走后台放量配置,可以通过以下接口打开。

ANR检测对性能的影响非常小

builder.forceTurnOnANR(true)

4.3. 强制打开性能统计

性能统计是否打开,正常是通过后台放量开关进行放量配置,如果希望强制打开性能统计,可以通过以下接口打开

! ! ! ! 不建议线上强制打开,对性能有一定的影响! ! ! !

builder.forceTurnOn(BuildConfig.DEBUG)

4.4. 设置灰度版本标识

如果配置了后台设置的灰度版本周报通知,需要在灰度包的业务代码中添加灰度标识。(默认为false)

builder.isBetaVersion(false)

4.5. 客户端内存泄露及时通知

  • 在客户端APP运行期间,检测内存泄露,并实时发送通知(Toast、通知栏)
  • 通过点击通知栏通知,能够进入内存泄露引用链查看界面

! ! ! ! 不建议线上打开,影响用户使用! ! ! !

builder.analyzeLeakForeground(BuildConfig.DEBUG)

通知栏效果

analyzeLeakForeground

内存泄露引用链详情页

leakDetail

内存泄露列表页

leakDetail

泄露历史记录桌面图标

leaks_icon

4.6. 设置版本名称

该项为可选项,如果不设置,将会取build.gradle中的versionName对应的值,当然你可以通过以下接口进行自定义:

builder.appVersionName("1.0.0")

4.7. 设置版本号

该项为可选项,如果不设置,将会取build.gradle中的versionCode对应的值,当然你可以通过以下接口进行自定义:

builder.appVersionCode(6666)

4.8. 设置用户ID

通过设置用户ID能够方便后期对问题的追踪

builder.userId("32682487")

4.9. 设置渠道号

通过设置渠道号能够方便后期对问题的追踪

builder.channel("yingyongbao")

4.10. 修改页面名称获取方式

目前Radar内部在记录,需要获取页面(Activity)的名称,默认获取方式为获取页面的类名。 该方式的缺点是,如果业务有部分web页面,Activity都是同一个类,但是内容(URL)不一样,需要重写页面名称获取方式

builder.pageNameProvider(new IPageNameProvider() {
    @Override
    public String getPageName(Activity activity) {
        if (activity instanceof WebViewActivity) {
            return xxxx;
        }
        return null;
    }
})

4.11. 修改Log输出实现

如果希望修改log打印是的tag等功能,可以通过

builder.logImpl(
    new ILog() {
        @Override
        public void v(String tag, String msg) {
            Log.v("Radar-SDK", msg);
        }

        @Override
        public void d(String tag, String msg) {
            Log.d("Radar-SDK", msg);
        }

        @Override
        public void i(String tag, String msg) {
            Log.i("Radar-SDK", msg);
        }

        @Override
        public void w(String tag, String msg) {
            Log.w("Radar-SDK", msg);
        }

        @Override
        public void e(String tag, String msg) {
            Log.e("Radar-SDK", msg);
        }

        @Override
        public void printError(String tag, Throwable throwable) {
            Log.e("Radar-SDK", Log.getStackTraceString(throwable));
        }
    })

5. 更多功能

除了在初始化的时候,通过config文件进行配置外,在程序运行期间,还提供如下功能项

5.1. 更新用户ID

程序运行期间,如果用户ID更换之后,可以通过API进行更新

Radar.setUserId("23748");

5.2. 添加自定义属性

为了方便排查问题,可以通过添加自定义属性,添加的属性将会被带到后台,方便查看。

Radar.putUserKeyValue("diyAttribute", "ssss");

6. 线上空实现

因为Radar SDK 对包大小有一定的影响,如果业务在部分渠道不希望将其带上,可以通过gradle引用空库,而不需要修改代码的方式来减少对包大小的影响:

dependencies {
    debugImplementation "com.cosmos.radar:core:2.6.7"
    releaseImplementation "com.cosmos.radar:empty:2.3.0"
}
Copyright © momo 2019 all right reserved,powered by Gitbook修订时间: 2020-02-05 15:37:48

results matching ""

    No results matching ""