首先忏悔下写了这么个知乎范的标题,不过“优雅”真的就是我所想要的词。本人 Android 接触时间不长,做开发经验也不多,如果有啥常识性问题,那就喷吧,已备好雨伞。
一般我们会在 Android 下开启日志进行调试,在使用 IDE 调试的情况下确实方便,但是一旦到现场调试,尤其是有多台 Android 需要调试的情况下, IDE 调试的方法就很蛋疼了。我觉得最优雅的方式应该是把日志查看功能直接做在 APP 内,需要查看的话直接调用出来。想法是好的,但实现起来有各种不舒服的地方,以下是我想过 /试过的解决方案:
用TextView
的append()
方法不断打印日志(关键信息)。此方法我用过一段时间,也算工作良好,但是不能用在复杂的情况下,因为我不知道如何在其他线程 /其它 Activity 下输出到主界面的TextView
里面,这可以优雅地做到吗?
用第三方日志查看 APP 如Ghost Log (logcat viewer) - Android Apps on Google Play。这个方法已经很接近我要的最终效果了,除了需要安装第三方 APP (很麻烦,也对用户不友好)以及操作也不是那么舒服(刷新太快,很难定位分析日志)这两个缺点。
把日志文件保存起来,需要查看日志时加载最后一部分过来。没有试过,也许是个不错的方案。
所以有没有人思考过这个问题并且有成熟的解决方案的?期待你的分享。
1
zhea55 2016-02-29 11:38:39 +08:00 1
楼主可以搜索一下这个
GitHub - ACRA/acra: Application Crash Reports for Android https://github.com/ACRA/acra 我就是配置的这个,错误信息会自动发送到远程服务器指定的数据库里面 具体的设备信息 堆栈日志 都是有的。 |
2
joshz OP r#1 @zhea55 感谢分享。这需要网络连接和远程数据库吧?我目前写的 APP 可以工作在局域网内,网络倒不是问题,但配置远程数据库可能比较麻烦。另外它发送的日志只有 Crash 相关的还是全部都有?
|
3
clanned 2016-02-29 11:52:03 +08:00 1
我前几天也在用 Ghost Log 体验不是特别满意, 准备这段时间写一个类似的开源应用。
|
5
zhea55 2016-02-29 12:45:09 +08:00
|
6
yov123456 2016-02-29 13:20:42 +08:00
用那种比如 腾讯 bugly 的服务?
|
7
clanned 2016-02-29 20:22:55 +08:00 via Android
@joshz 和 ghost log 类似,准备做成一个完全独立库和一个辅助库与 app 绑定两种方式。
|
8
joshz OP @clanned ,大致思路可以说下吗?私信也可以。是不是把 ghost log 的代码看懂也可以撸一个自用?
又去看了下 ghost log 的 Github 页面,它倒也提供与 APP 的集成,只是是通过 Broadcast 双向通信实现的,安装它是必不可少的。 |
9
clanned 2016-03-01 09:17:56 +08:00 1
@joshz 大体会有两种方式。
1. debugCompile 完全集成到被调试 app 。用 shared preference 控制开关,启动被调试应用后打印 log, 状态栏提供管理入口。 2. debugCompile 集成发送部分,安装监听 app 。被调试应用通过 aidl 发送日志到监听 app 。 |
11
814084764 2016-03-01 12:04:48 +08:00
可以参考设置里面的显示 CPU 信息的那种 view 去搞。就是在外面套一层 view 。不知道可以不可以。
|
12
joshz OP @814084764 ,你是说开发人员选项——显示 CPU 使用率的那种半透明小字的显示信息?其实 ghost log 就是这样显示的,我就是嫌它比较笨重,这种半透明的显示方式看着也挺糟心的。
|
13
joshz OP 我居然忘了面向 SO 编程大法,放上来又一个不错的方案: https://stackoverflow.com/questions/7213999/could-not-print-log-cat-in-my-app-on-android
其实就是在应用内需要“显示”日志的时候调用 logcat 输出过滤日志,再设置 TextView 的内容即可。相比我说的方案一,不再需要维护两份输出信息, logcat 本身可配置选项很多。要注意的是这种调用是一次性的,所以应该选择一个良好的调用时间点以尽可能多地显示关键日志。 |