Android 下如何优雅地离线调试(查看日志)?

2016-02-29 11:24:00 +08:00
 joshz

首先忏悔下写了这么个知乎范的标题,不过“优雅”真的就是我所想要的词。本人 Android 接触时间不长,做开发经验也不多,如果有啥常识性问题,那就喷吧,已备好雨伞。

一般我们会在 Android 下开启日志进行调试,在使用 IDE 调试的情况下确实方便,但是一旦到现场调试,尤其是有多台 Android 需要调试的情况下, IDE 调试的方法就很蛋疼了。我觉得最优雅的方式应该是把日志查看功能直接做在 APP 内,需要查看的话直接调用出来。想法是好的,但实现起来有各种不舒服的地方,以下是我想过 /试过的解决方案:

  1. TextViewappend()方法不断打印日志(关键信息)。此方法我用过一段时间,也算工作良好,但是不能用在复杂的情况下,因为我不知道如何在其他线程 /其它 Activity 下输出到主界面的TextView里面,这可以优雅地做到吗?

  2. 用第三方日志查看 APP 如Ghost Log (logcat viewer) - Android Apps on Google Play。这个方法已经很接近我要的最终效果了,除了需要安装第三方 APP (很麻烦,也对用户不友好)以及操作也不是那么舒服(刷新太快,很难定位分析日志)这两个缺点。

  3. 把日志文件保存起来,需要查看日志时加载最后一部分过来。没有试过,也许是个不错的方案。

所以有没有人思考过这个问题并且有成熟的解决方案的?期待你的分享。

8631 次点击
所在节点    Android
13 条回复
zhea55
2016-02-29 11:38:39 +08:00
楼主可以搜索一下这个
GitHub - ACRA/acra: Application Crash Reports for Android
https://github.com/ACRA/acra

我就是配置的这个,错误信息会自动发送到远程服务器指定的数据库里面

具体的设备信息 堆栈日志 都是有的。
joshz
2016-02-29 11:45:37 +08:00
r#1 @zhea55 感谢分享。这需要网络连接和远程数据库吧?我目前写的 APP 可以工作在局域网内,网络倒不是问题,但配置远程数据库可能比较麻烦。另外它发送的日志只有 Crash 相关的还是全部都有?
clanned
2016-02-29 11:52:03 +08:00
我前几天也在用 Ghost Log 体验不是特别满意, 准备这段时间写一个类似的开源应用。
joshz
2016-02-29 12:18:05 +08:00
@clanned ,有没有做成可集成库,而不是独立 APP 的计划?如果是的话对离线调试会很有帮助。
zhea55
2016-02-29 12:45:09 +08:00
yov123456
2016-02-29 13:20:42 +08:00
用那种比如 腾讯 bugly 的服务?
clanned
2016-02-29 20:22:55 +08:00
@joshz 和 ghost log 类似,准备做成一个完全独立库和一个辅助库与 app 绑定两种方式。
joshz
2016-03-01 09:11:21 +08:00
@clanned ,大致思路可以说下吗?私信也可以。是不是把 ghost log 的代码看懂也可以撸一个自用?

又去看了下 ghost log 的 Github 页面,它倒也提供与 APP 的集成,只是是通过 Broadcast 双向通信实现的,安装它是必不可少的。
clanned
2016-03-01 09:17:56 +08:00
@joshz 大体会有两种方式。

1. debugCompile 完全集成到被调试 app 。用 shared preference 控制开关,启动被调试应用后打印 log, 状态栏提供管理入口。

2. debugCompile 集成发送部分,安装监听 app 。被调试应用通过 aidl 发送日志到监听 app 。
joshz
2016-03-01 09:29:46 +08:00
@clanned ,学习了。期待你的开源项目。
814084764
2016-03-01 12:04:48 +08:00
可以参考设置里面的显示 CPU 信息的那种 view 去搞。就是在外面套一层 view 。不知道可以不可以。
joshz
2016-03-02 21:03:25 +08:00
@814084764 ,你是说开发人员选项——显示 CPU 使用率的那种半透明小字的显示信息?其实 ghost log 就是这样显示的,我就是嫌它比较笨重,这种半透明的显示方式看着也挺糟心的。
joshz
2016-03-05 13:10:33 +08:00
我居然忘了面向 SO 编程大法,放上来又一个不错的方案: https://stackoverflow.com/questions/7213999/could-not-print-log-cat-in-my-app-on-android

其实就是在应用内需要“显示”日志的时候调用 logcat 输出过滤日志,再设置 TextView 的内容即可。相比我说的方案一,不再需要维护两份输出信息, logcat 本身可配置选项很多。要注意的是这种调用是一次性的,所以应该选择一个良好的调用时间点以尽可能多地显示关键日志。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259822

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX