本文介绍如何通过Android SDK接入Android应用数据到日志服务移动运维监控。移动运维监控用于实时监控App崩溃、ANR等问题,并且支持智能分析,帮助您低成本、高效率地发现App应用中的各类隐患。
前提条件
已创建移动监控应用。具体操作,请参见
添加应用。
步骤一:集成SDK
您可以通过自动或手动方式集成SDK。
(推荐)自动集成
- 在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'
}
手动集成
步骤二:配置权限
在
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;
}
);
}
}
- 通过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中查看崩溃信息。
在目标移动运维监控实例的
自定义查询页面,单击
查询/分析。如果显示有日志,则表示接入数据成功。