Android SDK接入(本地集成)

本文介绍如何通过本地集成方式添加依赖接入远程日志服务。

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

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

前提条件

  • 已创建项目和应用。具体操作请参见快速入门

  • 已下载配置文件,并获取AppKey和AppSecret。详细操作请参见下载配置文件

  • 已下载SDK。详细操作请参见下载SDK

  • 已获取远程日志公钥,即获取配置文件中appmonitor.tlog.rsaSecret字段的内容。

使用限制

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

  • 仅支持armeabi-v7a/arm64-v8a/X86/X86_64架构。

  • 日志在手机端最多存储7天。

接入概述

  1. 添加依赖:采用本地集成方式。

  2. 接入服务:添加自定义Application,以及初始化代码;配置ABI;设置日志拉入级别。

  3. 打印日志:引入头文件;在代码中打印日志信息。

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

  5. 编译

添加依赖

1:将SDK包内所有文件拷贝至项目的libs目录下。

2:在build.gradle项目文件中,添加本地SDK文件目录地址。

repositories {
    flatDir {
        dirs 'libs'
    }
}

3:在build.gradle项目文件的dependencies{}代码段,添加SDK依赖。

//1、本地jar库引入
compile fileTree(include:['*.jar'],dir:'libs')

//2、公共库
compile(name:'alicloud-android-ha-adapter-1.2.4.0-open',ext:'aar')
compile(name:'alicloud-android-ha-core-1.1.0.7-open',ext:'aar')
compile(name:'alicloud-android-ha-protocol-1.1.5.0-open',ext:'aar')
compile(name:'alicloud-android-rest-1.7.8-open',ext:'aar')
compile(name:'alicloud-android-tool-1.1.0',ext:'aar')
compile(name:'alicloud-android-utdid-2.6.0',ext:'jar')
compile(name:'fastjson-1.1.73.android',ext:'jar')
compile(name:'alicloud-android-settingservice-1.2.0',ext:'aar')
compile(name:'alicloud-android-logger-1.2.0',ext:'aar')

//3、移动日志,不接入可注释掉
compile(name:'alicloud-android-tlog-1.1.8.0-open',ext:'aar')
compile(name:'alicloud-android-ha-tlog-message-rpc-1.1.3.2-open',ext:'aar')
compile(name:'alicloud-android-ha-tlog-uploader-oss-1.1.0.9-open',ext:'aar')
compile(name:'alicloud-android-ha-tlog-protocol-1.1.1.0-open',ext:'aar')
compile(name:'alicloud-android-ha-tlog-native-1.1.2.0-open',ext:'aar')
compile(name:'alicloud-android-cpp-shared-1.1.0',ext:'aar')
compile(name:'oss-android-sdk-2.9.15',ext:'aar')
compile(name:'okhttp-3.11.0',ext:'jar')
compile(name:'okio-1.14.0',ext:'jar') 

接入服务

  1. 预初始化SDK

预初始化SDK可以在Application.onCreate函数中完成。

public class MyApplication extends Application {
   @Override
   public void onCreate() {
     super.onCreate();  
     AliHaAdapter.getInstance().preStart(this);
   }
}
  1. 开启远程日志

在同意隐私协议之后,可以开启远程日志。

private void startHa() {
  AliHaConfig config = new AliHaConfig();
  config.appKey = "xxxxxxxx"; //配置项:appkey
  config.appVersion = "x.xx"; //配置项:应用的版本号
  config.appSecret = "xxxxxxxxxxxx"; //配置项:appsecret
  config.channel = "mqc_test"; //配置项:应用的渠道号标记,自定义
  config.userNick = null; //配置项:用户的昵称
  config.application = this; //配置项:应用指针
  config.context = getApplicationContext(); //配置项:应用上下文
  config.isAliyunos = false; //配置项:是否为yunos
  config.rsaPublicKey = "xxxxxxx"; //配置项:tlog公钥
  AliHaAdapter.getInstance().addPlugin(Plugin.tlog);
  AliHaAdapter.getInstance().start(config);

  TLogService.updateLogLevel(TLogLevel.XXXXXX); //配置项:控制台可拉取的日志级别
}

配置说明如下:

参数

说明

config.appKey

用于指定App的AppKey。

【数据类型】字符串

【如何获取】参见:步骤1

【是否必选】是

【是否可为空】否

【默认值】无

config.appVersion

用于设置App的版本号。

【数据类型】字符串

【格式要求】自定义

【取值范围】任意长度。

说明

该参数值将在控制台显示为下拉列表选项,建议短小凝练。

【是否必选】是

【是否可为空】否

【默认值】无

【大小写敏感】是。例如,vx.x和Vx.x不是一个版本。

【字符类型】英文大小写、数字。

说明

该参数不支持中文字符、特殊字符。

config.appSecret

用于指定App的AppSecret。

【数据类型】字符串

【如何获取】参见:步骤1

【是否必选】是

【是否可为空】否

【默认值】无

config.channel

用于设置渠道标识,上报至服务端,进行渠道区分。

【数据类型】字符串

【取值范围】任意长度

【是否必选】否

【是否可为空】是

【默认值】无

【字符类型】英文大小写、数字。

说明

该参数不支持中文字符、特殊字符。

config.userNick

用于设置用户昵称,上报至服务端,进行用户区分。后续可能依据该参数,进行数据检索。

【数据类型】字符串

【取值范围】任意长度

【是否必选】否

【是否可为空】是

【默认值】无

【字符类型】英文大小写、数字。

说明

该参数不支持中文字符、特殊字符。

【命名规范】自定义

config.application

用于指定本应用。

重要

不能指向其他应用。

【数据类型】对象

【是否必选】是

【是否可为空】否

【默认值】无

config.context

用于指定App的上下文对象,设置getApplicationContext();即可。

【数据类型】对象

【是否必选】是

【是否可为空】否

【默认值】无

config.isAliyunos

用于判断App所在平台是否为YunOS。

【数据类型】布尔型

【取值范围】false/true

【是否必选】否

【是否可为空】是

【默认值】false

config.rsaPublicKey

用于指定远程日志公钥。

【数据类型】字符串

【如何获取】参见:步骤1

【是否必选】是

【是否可为空】否

【默认值】无

TLogLevel.XXXXXX

用于全局设置控制台可拉取的日志的级别。

【数据类型】枚举型

【取值范围】

  • VERBOSE:可拉取所有级别的日志。

  • DEBUG:可拉取DEBUG/INFO/WARN/ERROR级别的日志。

  • INFO:可拉取INFO/WARN/ERROR级别的日志。

  • WARN:可拉取WARN/ERROR级别的日志。

  • ERROR:可拉取ERROR级别的日志。

【是否必选】是

【默认取值】ERROR

【配置说明】

  • TLogService.updateLogLevel()函数可选调用,如未调用,则全局默认可拉取的日志级别为ERROR。

  • 日志级别说明请参见基本概念

  1. 数据采集

您需要在满足合规要求下尽可能早的进行信息采集设置,默认是采集设备信息、系统信息和网络信息。

AliHaConfig config = new AliHaConfig();
//可以根据合规要求禁止采集设备信息、系统信息和网络信息
config.noCollectionDataType = AliHaConfig.NO_DEVICE_DATA | AliHaConfig.NO_OS_DATA | AliHaConfig.NO_NETWORK_DATA;  

采集参数:

敏感数据类型

说明

信息字段详情

NO_DEVICE_DATA

不采集设备信息

包括:品牌(Build.BRAND)、型号(Build.MODEL)、屏幕分辨率、CPU信息(Build.CPU_ABI)、硬件名称(Build.HARDWARE)

NO_OS_DATA

不采集系统信息

包括:语言、系统版本(Build.VERSION.RELEASE、Build.VERSION.SDK_INT)、系统编译唯一标识(Build.FINGERPRINT)

NO_NETWORK_DATA

不采集网络信息

包括:运营商、接入点信息、网络类型

  1. 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>

打印日志

1:如业务流程触发日志输出,需引入头文件:

import com.alibaba.ha.adapter.service.tlog.TLogService;

2:在适当位置添加代码,输出日志信息。示例代码:

TLogService.logv("MODEL","TAG","MESSAGE");
TLogService.logd("MODEL","TAG","MESSAGE");
TLogService.logi("MODEL","TAG","MESSAGE");
TLogService.logw("MODEL","TAG","MESSAGE");
TLogService.loge("MODEL","TAG","MESSAGE");

函数TLogService.<LogLevel>(<MODEL>,<TAG,<MESSAGE>);

说明:用于输出指定级别的日志信息。

参数

说明

LogLevel

指定拉取的日志级别。日志级别说明请参见基本概念

【数据类型】枚举型

【取值范围】

  • logv:输出VERBOSE(调试详情)级别的日志。

  • logd:输出DEBUG(调试信息)级别的日志。

  • logi:输出INFO(一般信息)级别的日志。

  • logw:输出WARN(警告信息)级别的日志。

  • loge:输出ERROR(错误信息)级别的日志。

【配置说明】输出的日志是否可以被控制台拉取,取决于TLogService.updateLogLevel()函数的参数设置。例如,当TLogService.updateLogLevel(TLogLevel.WARN)时,则控制台拉取不到通过logv/logd/logi输出的日志。

MODEL

用于设置输出日志内容的功能模块,便于后续根据来源筛选日志。

【数据类型】字符串

【字符类型】英文大小写、中文、数字、特殊字符

【是否必选】是

【是否大小写敏感】否

【示例】“推送功能模块Push”

TAG

用于设置日志的关键字,便于后续根据标签筛选日志。

【数据类型】字符串

【字符类型】英文大小写、中文、数字、特殊字符

【是否必选】是

【是否大小写敏感】否

【示例】“推送功能模块收到了推送Push.receive,推送功能模块点击了推送Push.click”

MESSAGE

用于输出日志信息。

【数据类型】字符串

【字符类型】英文大小写、中文、数字、特殊字符

【是否必选】是

混淆配置

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

-keep class com.taobao.tao.log.**{*;}
-keep public class * extends com.taobao.android.tlog.protocol.model.request.base.FileInfo{*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

编译

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

样例代码

远程日志服务Android SDK接入工程样例请参见Demo工程