Android多渠道SDK开发心得(6)——sdk日志注入构建时间戳
2017-11-26 12:24
441 查看
sdk提供给第三方使用,出现问题后一般都需要抓日志进行分析排查,而分析问题时又往往需要确定sdk的版本或构建等信息、以便根据源码快速定位到问题。随着版本的不断迭代,仅仅通过日志往往无法快速判断出sdk是哪一版,此时如果能在sdk初始化及一些关键位置的日志中注入构建时间戳,这个问题立马也就迎刃而解了。
分别在各渠道初始化日志中加入以下”_ _BUILD_TIME”标志
sdk/src/alibaba/com/tobenull/sdk/SDK.java
sdk/src/baidu/com/tobenull/sdk/SDK.java
在sdk中添加以下脚本:
sdk/build.gralde
上述脚本通过ant的replaceregexp任务实现自动匹配”src/$product/java/com/tobenull/sdk/SDK.java”文件中的”_ BUILD_TIME:”,并将其替换为”${product}_BUILD_TIME:${rootProject.ext.buildTime}”,在编译前将渠道标志与构建时间戳都达到该行日志中。从而,当sdk被apk使用时,输出日志自带该渠道信息及构建时间戳信息的效果。
在Build Variants窗口将渠道切换为baiduDebug并运行app,日志如下:
根据第一行日志,发现其中带有渠道与构建时间戳信息,后续的每一次编译该时间戳也会随之发生变化。
出了在初始化日志中注入时间戳外,还可以在某些关键位置注入时间戳、以便出问题了能够快速进行排查。
分别在各渠道初始化日志中加入以下”_ _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...
根据第一行日志,发现其中带有渠道与构建时间戳信息,后续的每一次编译该时间戳也会随之发生变化。
出了在初始化日志中注入时间戳外,还可以在某些关键位置注入时间戳、以便出问题了能够快速进行排查。
相关文章推荐
- Android多渠道SDK开发心得(4)——多渠道sdk的开发与构建
- Android多渠道SDK开发心得(8)——关于sdk资源的引用
- Android多渠道SDK开发心得(9)——自动生成文档
- Android多渠道SDK开发心得(1)——最简单的aar包sdk
- Android多渠道SDK开发心得(3)——生成jar包和so
- [置顶] Android多渠道SDK开发心得
- Android多渠道SDK开发心得(2)——合并的aar包sdk
- Android多渠道SDK开发心得(5)——多渠道sdk的调试
- Android多渠道SDK开发心得(7)——自动生成demo
- 用Carbide和S60 SDK构建Symbian C++开发环境
- 开发Android第一步,安装SDK 1.6, 模拟器及安装游戏
- Android 开发环境搭建中--- “An SDK Target must be specified.” 问题解决(转载)
- Android 开发环境搭建中--- “An SDK Target must be specified.” 问题解决
- 构建Android开发环境
- Android开发环境搭建全程演示(jdk+eclipse+android sdk) (转帖)
- 构建Android开发环境
- Android 1.5 SDK与SDK开发教程
- Android 开发环境搭建中--- “An SDK Target must be specified.” 问题解决
- 开发Android第一步,安装SDK 1.6, 模拟器及安装游戏