您的位置:首页 > 移动开发 > Android开发

Android多渠道SDK开发心得(6)——sdk日志注入构建时间戳

2017-11-26 12:24 441 查看
  sdk提供给第三方使用,出现问题后一般都需要抓日志进行分析排查,而分析问题时又往往需要确定sdk的版本或构建等信息、以便根据源码快速定位到问题。随着版本的不断迭代,仅仅通过日志往往无法快速判断出sdk是哪一版,此时如果能在sdk初始化及一些关键位置的日志中注入构建时间戳,这个问题立马也就迎刃而解了。

分别在各渠道初始化日志中加入以下”_ _BUILD_TIME”标志

sdk/src/alibaba/com/tobenull/sdk/SDK.java

public class SDK extends BaseSDK {
...
@Override
protected String getProductFlavor() {
return "alibaba";
}

@Override
public void init() {
TLog.d("SDK->init, _a_BUILD_TIME:");
...
}
...


sdk/src/baidu/com/tobenull/sdk/SDK.java

public class SDK extends BaseSDK {
...
@Override
protected String getProductFlavor() {
return "baidu";
}

@Override
public void init() {
TLog.d("SDK->init, _a_BUILD_TIME:");
...
}
...


在sdk中添加以下脚本:

sdk/build.gralde

rootProject.ext.SDKProperties.each {
...
ant.replaceregexp(match:'_[a-z]+_BUILD_TIME:(20\\d{6}_\\d{6}.\\d{3})?',       replace:"_${product}_BUILD_TIME:${rootProject.ext.buildTime}", byline:true) {
fileset(dir: "src/$product/java/com/tobenull/sdk", includes: 'SDK.java')
}
}


  上述脚本通过ant的replaceregexp任务实现自动匹配”src/$product/java/com/tobenull/sdk/SDK.java”文件中的”_ BUILD_TIME:”,并将其替换为”${product}_BUILD_TIME:${rootProject.ext.buildTime}”,在编译前将渠道标志与构建时间戳都达到该行日志中。从而,当sdk被apk使用时,输出日志自带该渠道信息及构建时间戳信息的效果。

  在Build Variants窗口将渠道切换为baiduDebug并运行app,日志如下:

12-16 07:41:13.112 29532-29532/com.baidu.demo D/null-tobe: SDK->init, _baidu_BUILD_TIME:20171216_231210.392
12-16 07:41:13.112 29532-29532/com.baidu.demo D/null-tobe: BaseSDK->init, baidu
12-16 07:41:13.123 29532-29532/com.baidu.demo D/null-tobe: BaseManager->init
12-16 07:41:13.123 29532-29532/com.baidu.demo D/null-tobe: SDK->initBaidu, init baidu...


  根据第一行日志,发现其中带有渠道与构建时间戳信息,后续的每一次编译该时间戳也会随之发生变化。

  出了在初始化日志中注入时间戳外,还可以在某些关键位置注入时间戳、以便出问题了能够快速进行排查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: