本文介绍如何通过Android SDK接入Android应用数据到日志服务移动运维监控。移动运维监控用于实时监控App崩溃、ANR等问题,并且支持智能分析,帮助您低成本、高效率地发现App应用中的各类隐患。
前提条件
已创建移动监控应用。具体操作,请参见添加应用。
步骤一:集成SDK
您可以通过自动或手动方式集成SDK。
(推荐)自动集成
目前,只支持Maven中央仓库。
在Project级别的build.gradle文件中添加以下配置。
buildscript { repositories { google() jcenter() mavenCentral() } } allprojects { repositories { google() jcenter() mavenCentral() } }在app级别的build.gradle文件中添加如下配置。
android { defaultConfig { ndk { // 设置支持的so库架构,不设置时默认支持全部架构。 abiFilters 'armeabi' //, 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } dependencies { // Gradle 3.0以上版本请使用implementation。 // 其中latest.release指的是最新的SDK版本号,建议您指定明确的版本号。 implementation 'com.aliyun.openservices:aliyun-log-android-sdk:latest.release' implementation'com.aliyun.openservices:sls-android-core:latest.release' implementation'com.aliyun.openservices:sls-android-ot:latest.release' implementation'com.aliyun.openservices:sls-android-crashreporter:latest.release' }
手动集成
从Maven中央仓库下载如下SDK的最新版本。
步骤二:配置权限
在AndroidManifest.xml文件中加上如下权限申明:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>步骤三:混淆配置
如果您的项目代码进行了打包混淆,则您需要进行混淆配置。在打包混淆规则中,需要保留com.uc.crashsdk包名下所有的类名和方法名。例如在progaurd.cfg文件中添加如下配置:
-keep class com.uc.crashsdk.** { *; }
-keep interface com.uc.crashsdk.** { *; }
-keep class com.aliyun.sls.android.producer.* { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
-keep class com.aliyun.sls.android.** { *; }步骤四:配置接入服务
添加Application类,即在$PROJECT/app/src/main/AndroidManifest.xml文件中增加Application类。
例如添加MyApplication类,配置示例如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aliyun.sls.android.demo"> ... <application android:icon="@mipmap/ic_launcher" ... android:name="com.aliyun.sls.android.demo.SLSDemoApplication" ... android:theme="@style/AppTheme"> ... </application> </manifest>IDE将根据Android Studio提示,自动创建一个名为MyApplication的类添加到当前项目中。
在MyApplication.onCreate方法中,增加如下初始化代码。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Credentials credentials = new Credentials(); credentials.instanceId = "your instance id"; credentials.endpoint = "your endpoint"; credentials.project = "your project"; credentials.accessKeyId = "your access key id"; credentials.accessKeySecret = "your access key secret"; SLSAndroid.initialize( this, credentials, configuration -> { // 开启崩溃捕获功能。 configuration.enableCrashReporter = true; // 开启卡顿监控功能。 configuration.enableBlockDetection = true; } ); } }Credentials
Credentials类定义了关键的配置字段。
类型
字段
示例值
说明
配置参数
instanceId
sls-****d60f
您在日志服务移动运维监控平台上所添加的应用ID。更多信息,请参见获取应用ID。
endpoint
https://cn-hangzhou.log.aliyuncs.com
日志服务Project的访问域名,此处必须添加
https://前缀。如何获取,请参见公网。重要只支持公网服务入口。
project
sls-ayasls-demo
您在日志服务移动运维监控平台上添加应用时所绑定的日志服务Project。更多信息,请参见添加应用。
鉴权参数
accessKeyId
LTAI****eYDw
日志服务Project的AccessKey ID。如何获取,请参见访问密钥。
accessKeySecret
lrRq****GOVM
日志服务Project的AccessKey Secret。如何获取,请参见访问密钥。
securityToken
124f****a369
日志服务Project的访问密钥Token。使用STS方式接入时,需要配置。如何获取,请参见AssumeRole。
SLSAndroid
SLSAndroid类提供了SDK初始化相关的全部参数配置、用户信息配置等接口。
类型
字段或方法
说明
调试方法
setLogLevel
配置SDK的日志等级。可选值为Log.VERBOSE、Log.DEBUG、Log.INFO、Log.WARN和Log.ERROR。
凭证更新
setCredentials
更新Credentials凭证信息,支持热更新。
配置方法
setUserInfo
更新用户信息。
Configuration
Configuration类提供了SDK初始化额外参数配置的接口。
类型
字段/方法
说明
配置方法
enableCrashReporter
是否启用崩溃捕获功能。
enableBlockDetection
是否开启卡顿监控功能。
spanProvider
自定义Span的Resource和Attribute信息。
环境配置
env
App的环境信息,默认为default。
一般开发环境配置为dev;线上环境配置为prod。
通过STS方式配置credentials.accessKeyId、credentials.accessKeySecret和credentials.securityToken。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Credentials credentials = new Credentials(); // instanceId为必填参数。 credentials.instanceId = "your instance id"; // 以下参数可不填。 credentials.endpoint = "your endpoint"; credentials.project = "your project"; credentials.accessKeyId = "your access key id"; credentials.accessKeySecret = "your access key secret"; SLSAndroid.initialize( this, credentials, configuration -> { // 开启崩溃捕获功能。 configuration.enableCrashReporter = true; // 开启卡顿监控功能。 configuration.enableBlockDetection = true; } ); } // 获取请求相关信息后,可调用如下接口。 private void onUpdateSLS() { Credentials credentials = new Credentials(); // (可选)更新AccessKey。 credentials.accessKeyId = "your access key id"; credentials.accessKeySecret = "your access key secret"; credentials.securityToken = "your access security token"; // (可选)更新Project等信息。 credentials.endpoint = "your endpoint"; credentials.project = "your project"; SLSAndroid.setCredentials(credentials); } }
步骤五:接入验证
在MyApplication.onCreate方法中,配置
SLSAndroid.setLogLevel(Log.DEBUG);,打开插件的日志开关。更多信息,请参见步骤四:配置接入服务。
编写测试代码,模拟或触发移动端崩溃。
常见的崩溃模式方式如下:
空指针
private void crashInJavaNull() { String nullStr = "1"; if (nullStr.equals("1")) { nullStr = null; } nullStr.equals(""); }类型转换异常
private void crashInJavaClassCast() { View view = new View(this); TextView text = (TextView)view; }越界异常
private void crashInJavaOutOfBounds() { new ArrayList<>(10).get(11); }native crash
JNIBridge.nativeCrash(0, 0);native abort
JNIBridge.nativeCrash(2, 0);ANR
while (true) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } }
重启移动端,然后等待大概2分钟后,您可以在日志服务控制台的目标LogStore中查看崩溃信息。
在目标移动运维监控实例的自定义查询页面,单击查询/分析。如果显示有日志,则表示接入数据成功。
