应用打开就闪退了,这个问题能不能修一修?

手机里的应用多了,遇到 bug 也是在所难免的事。但遇到问题后如果你像开头这样向开发者反馈问题,那你多半也难以得到直接的解决方案——无论是「闪退」「报错」还是其他常见问题,我们能够看见的其实都只是最终的呈现结果,并非导致问题的核心原因。

想让开发者帮你更好地定位并解决遇到的问题,正确地抓取 log 文件是一项必不可少的技能。

Log 文件是什么?

Log 是用来记录设备运行活动的日志,应用有应用的运行日志,系统有系统的运行日志……所以出现问题的时候,就需要我们找对应的日志。

一般来说,常见的系统 log 文件分为三种:Logcat,dmesg 以及 ramoops。它们的区别大致如下:

  • logcat 是名副其实的 Android 系统日志,记录系统的异常行为,比较常用;
  • dmesg 是内核日志,详细记录了每一个子系统(subsystem)的活动;
  • ramoops 是内存相关的日志,往往用于调查设备的意外重启。

一般的开发者需要前两种 log 比较多,如果不确定自己应该提交什么类型的 log,不妨先用合适的语言询问开发者。

获取 Log 文件其实很简单

一般来说有两种获取 log 的方式:1、通过应用获取(需要 root 权限,包含所有类型);以及通过 Android 调试桥(即 ADB,仅适用于 logcat 和 dmesg,获取 dmesg 仍然需要 root 权限)。

通过应用来获取 Log

获取 logcat

  1. 获取一个 logcat 应用,比如说 Matlog 或是 SysLog,这里以 Matlog 为例。
  2. 下载打开并授予其 root 权限,这时在应用的主页面就会显示出此时的日志。
  3. 点击右上角的「三个点」菜单按钮,点选 File,再点选 Record。
  4. 这时 Matlog 会弹出 log 命名对话框,默认的命名是「日期+时间」,此日志会保存在内部存储 /matlog/savedlogs/ 下。
  5. 点击确定之后就可以将 Matlog 放在后台,去复现错误了。
  6. 成功复现错误之后回到 Matlog,点击右下角的「停止」按钮,这时 Matlog 会将刚才录制的 logcat 显示在屏幕上。点击右上角菜单按钮选择 Share 即可将应用日志 logcat,内核日志 dmesg 以及本机信息打包分享出去。


获取 dmesg

除了通过 Matlog 获取打包的 dmesg,使用终端(Terminal)也是获取内核 log 的一种好办法。

  1. 首先,还是要获取一个终端模拟器应用,比如说我们之前介绍过的 Termux
  2. 使用命令 su 获取 root 权限,键入命令 dmesg > /sdcard/test.log
  3. 完成之后 dmesg 就会保存在内部存储根目录下,名为 test.log 的文件中。

获取 ramoops

  1. 首先要先获取一个可以访问系统目录的文件浏览器,比如 Mixplorer 等。
  2. 在文件管理器中定位到 /sys/fs/pstore 并找到 console-ramoops 或者 console-ramoops1 等类似文件。
  3. 将这个文件复制到内部存储,并提交给开发者。

通过 ADB 来获取 log 文件

1、首先在电脑上配备 ADB 环境,配置的文章可以参考我们之前的文章:Windows 、macOS

关于拷贝路径,Windows 可以点击上方路径栏并进行复制粘贴;macOS 则需要先选择「显示」 - 「显示路径栏」之后在路径栏上右键,并复制地址。

2、开启「开发者选项」中的「USB 调试」。

3、将你的设备通过 USB 连接到电脑。

4、在终端中键入 cd <文件夹的路径> 以进入该文件夹,这里要将<文件夹的路径>替换为解压出来的文件夹的路径。

在终端中可以使用 adb devices 或者 ./adb devices 来检查设备的连接情况,如果返回了如图所示的提示,那么说明设备已经成功连接。

5、使用此命令 adb logcat -c 或者 ./adb logcat -c 来清理 logcat 缓存

6、获取 log 文件:

获取 logcat 请输入:adb logcat -d > test.log 或者 ./adb logcat -d > test.log

获取 dmesg 请输入:adb shell dmesg > test.log 或者 ./adb shell dmesg > test.log

生成的 log 文件会存放在 ADB 工具文件夹(默认即 platform-tools)下。

最后,即便无法获取 log 文件,也可以在向开发者汇报 bug 时附上可以稳定重现的步骤或是对于此 bug 的详细描述,至少可以帮助开发者做出初步的筛选。

结语

遇到问题的时候,优先寻求搜索引擎或者社群里的其它成员是比较合适的方式,而且很大概率能够解决问题,这是因为这些问题往往不只是在自己身上发生但是当你付出了一些尝试,仍然没有解决问题的时候,向开发者求助就成为你的首选了。

一般应用都会内建反馈渠道自动发送应用运行的 log,或者是会附上加入社群的联系方式、应用的官方社交帐号、电子邮件等,通过这些渠道都可以直接联系到开发团队,而如果当你使用的是第三方内核、ROM 时,也可以去论坛发帖处留言,或者加入开发者创建的社群里直接联系,提供 log。

要相信,优秀的开发团队一定会欢迎、重视并感谢这些有价值的反馈。

关联阅读:

参考资料:

> 下载少数派 客户端、关注 少数派公众号 ,了解更多实用的玩机知识 🚀

> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺 🛒