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

来源:互联网 发布:android 知乎源码 编辑:程序博客网 时间:2024/05/29 17:14

  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.39212-16 07:41:13.112 29532-29532/com.baidu.demo D/null-tobe: BaseSDK->init, baidu12-16 07:41:13.123 29532-29532/com.baidu.demo D/null-tobe: BaseManager->init12-16 07:41:13.123 29532-29532/com.baidu.demo D/null-tobe: SDK->initBaidu, init baidu...

  根据第一行日志,发现其中带有渠道与构建时间戳信息,后续的每一次编译该时间戳也会随之发生变化。
  出了在初始化日志中注入时间戳外,还可以在某些关键位置注入时间戳、以便出问题了能够快速进行排查。

阅读全文
0 0