code小生,一个专注 Android 领域的技术平台

公众号回复 Android 加入我的安卓技术群

作者:开发者说
链接:https://www.jianshu.com/p/599a3dc5f1ec
声明:本文已获
开发者说授权发表,转发等请联系原作者授权

在产品的研发测试以及投放给用户使用的过程中,我们会遇到各种各样的问题,为了有效的分析解决问题,Log的收集也就至关重要了。

log上传流程

设备出现异常时,提示用户上传log,后端运维人员根据设备ID提取log信息给开发人员进行定位分析,再根据客服提供的用户操作信息以及log将会大大缩减了问题发现到解决的时间,提升了系统迭代的效率,增强了产品的健壮性和生命力。

以Android 8.0为例,由于是log收集,肯定少不了组件logcat,目录位于:system/core/logcat/

我们不是要去分析Logcat的实现,而是要利用logcat(编译烧录板子后位于system/bin目录)进行log收集,由于Android8.0 Selinux的原因,我们无法直接操作system/bin/logcat ,那么该如何解决这个问题?我们有个方法:拷贝一份logcat到vender分区(并进行重命名,比如xxxLogcat),独立于system/bin/logcat

通过mk文件,拷贝编译好的logcat到vendor/bin
PRODUCT_COPY_FILES +=device/manufacturer/xxx/etc/logcat:/vendor/bin/xxxlogcat

再对vender/bin/xxxLogcat进行Selinux的相关权限配置即可。

到目前为止,核心组件logcat的问题已经解决,接下来就是如何让xxxLogcat进行工作,用户通过什么方式开启log?

日志收集子流程

如上子流程图所示,打开日志开关,开启log收集,那么体现在代码中,如何通过“开关”来进行logcat的开启和关闭呢?这里需要借助init.rc(系统第一个启动的init程序解析),在rc文件的定义中有四种类型的定义:Action、Commands、Services、Options,因为我们想用过设置prop的方式来开启和关闭xxxlogcat服务,所以rc是最佳首选。

on property:persist.service.logcat.enable=1
start logcat_service
on property:persist.service.logcat.enable=0
stop logcat_service


service logcat_service /vendor/bin/xxxlogcat -b system -b events -b main -n 10 -v threadtime -f /data/logger/logcat.log -r 5000       //这里是logcat循环存储,单个log最大5000k,最多存10个
user  root
group log system
class main
disabled  //设置该service开机默认不启动

在UI中通过设置prop "persist.service.logcat.enable"来控制xxxlogcat服务的开启和关闭,待log收集完成后,用户点击上传按钮完成log上传,这里需要注意的是,因为系统里不止有android log,还有data/anr/trace 以及tombstone等关键信息,需要把这些文件一并上传。

这种方案同时也非常适用的测试阶段,特别是在老化试验中,先开启log,在进行老化试验,出现问题时及时取出log能够快速的定位问题。

如果有更好的方案还请留言探讨。

推荐阅读

收集老是忘的 kotlin 代码片段

为 Retrofit2 提供的 FastJson 转换库

30 岁程序员的选择,一线 OR 二线?


很多程序员只是选择了自己最熟悉的技术

而非最合适的技术

更多相关文章

  1. Android(安卓)— 运行时权限检查
  2. Android学习笔记(一)-Android与3G简介
  3. Android(安卓)工具整合,让你的 Android(安卓)开发更高效
  4. Android登录界面的实现
  5. android基础知识12:android自动化测试06―Instrumentation 03 技
  6. Android——屏幕旋转时数据丢失问题解决方案
  7. Android的四大组件之三--Activity(4)----->Activity的启动方式和相
  8. Android(安卓)用户界面(User Interface)概要
  9. Android用户界面布局(layouts)

随机推荐

  1. AndroidMainfest.xml
  2. Android(安卓)学习之Layout
  3. android adb shell dumpsys
  4. android中判断网络是否连接
  5. android小demo笔记
  6. 修改标题栏的高度
  7. Android(安卓)2.1 源码结构分析
  8. android 文件操作
  9. Android隐藏标题栏,全屏显示
  10. android NDK环境搭建