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

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

样例代码

Demo工程

使用限制

  • 仅支持Android 4.2及以上版本。
  • 仅支持arm64-v8a、armeabi-v7a、x86和x86_64架构。
  • 日志在手机端最多存储7天。

步骤一:创建监控任务

  1. 登录ARMS控制台,在左侧导航栏中单击App监控
  2. App监控页面,单击右上角的创建App监控任务
  3. 接入中心面板,单击Android App
    接入App监控
  4. 在接入面板的Step 1区域输入App名称PackageName,选择App的平台,然后单击创建应用
    创建APP监控任务
  5. Step 2区域,根据页面提示下载aliyun-emas-services.json文件。
    查看配置
  6. 打开aliyun-emas-services.json文件,获取emas.appKeyemas.appSecretemas.packageNameappmonitor.rsaSecret内容。
    aliyun-emas-services
    说明
    • 为避免在日志中泄漏参数appkey、appsecret、rsaSecret或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。
    • 由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置appkey、appsecret、rsaSecret参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。具体操作,请参见(可选)步骤六:混淆配置

步骤二:添加依赖

  1. 下载SDK,并将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.1.5.2-open',ext:'aar')
    compile(name:'alicloud-android-ha-core-1.1.0.6.1-open',ext:'aar')
    compile(name:'alicloud-android-ha-protocol-1.1.0.9-open',ext:'aar')
    compile(name:'alicloud-android-ha-tbrest-1.1.5.0-open',ext:'aar')
    compile(name:'alicloud-android-utdid-2.5.3',ext:'jar')
    compile(name:'fastjson-2.0.9.android',ext:'jar')
    
    
    //3、移动日志,不接入可注释掉
    compile(name:'alicloud-android-tlog-1.1.4.4-open',ext:'aar')
    compile(name:'alicloud-android-ha-tlog-message-rpc-1.1.3.1-open',ext:'aar')
    compile(name:'alicloud-android-ha-tlog-uploader-oss-1.1.0.8-open',ext:'aar')
    compile(name:'alicloud-android-ha-tlog-protocol-1.1.0.9-open',ext:'aar')
    compile(name:'alicloud-android-ha-tlog-native-1.1.1.0-open',ext:'aar')
    compile(name:'alicloud-android-setting-service-1.0.0',ext:'aar')
    compile(name:'alicloud-android-logger-1.0.2',ext:'aar')
    compile(name:'okhttp-3.4.1',ext:'jar')
    compile(name:'okio-1.9.0',ext:'jar')
    compile(name:'oss-android-sdk-2.9.3',ext:'aar')

步骤三:接入服务

  1. 定义Application类,编写onCreate方法,启动服务。
    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            initHa();
        }
        private void initHa() {
             AliHaConfig config = new AliHaConfig();
             config.appKey = "xxxxxxxx"; //替换为步骤一中获取的AppKey。
             config.appVersion = "x.xx"; //设置App的版本号。
             config.appSecret = "xxxxxxxxxxxx"; //替换为步骤一中获取的AppSecret。
             config.channel = "mqc_test"; //设置渠道标识,上报至服务端,进行渠道区分。
             config.userNick = null; //设置用户昵称,上报至服务端,进行用户区分。后续可能依据该参数,进行数据检索。
             config.application = this; 
             config.context = getApplicationContext(); 
             config.isAliyunos = false; //App所在平台是否为YunOS。
             config.rsaPublicKey = "xxxxxxx"; //替换为步骤一中获取的appmonitor.tlog.rsaSecret。
             AliHaAdapter.getInstance().addPlugin(Plugin.tlog);
             AliHaAdapter.getInstance().openDebug(true);
             AliHaAdapter.getInstance().start(config);
             TLogService.updateLogLevel(TLogLevel.XXXXXX); //设置日志拉取级别。选项:ERROR(默认)、WARN、INFO、DEBUG、VERBOSE。
        }
    }
  2. 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 设置输出日志内容的功能模块,便于后续根据来源筛选日志。
    TAG 设置日志的关键字,便于后续根据标签筛选日志。
    MESSAGE 输出日志信息。

步骤五:上报日志

  1. 如业务流程触发日志输出,需引入头文件。
    import com.alibaba.ha.adapter.service.tlog.TLogService;
  2. 在适当位置添加代码,主动上报当日日志信息。
    示例代码:
    TLogService.positiveUploadTlog("COMMENT");  //COMMENT:上报日志时设置的备注信息,可用于记录待定位的问题。

    函数TLogService.positiveUploadTlog(<COMMENT>);用于主动上报当日缓存的日志信息。主动上报时系统会删除历史缓存日志,仅上报最新缓存的日志信息,避免相同日志重复上报。

(可选)步骤六:混淆配置

如需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 UTDID冲突解决方案