V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joshz
V2EX  ›  Android

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

  •  
  •   joshz · 2016-02-29 11:24:00 +08:00 · 8338 次点击
    这是一个创建于 2981 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    13 条回复    2016-03-05 13:10:33 +08:00
    zhea55
        1
    zhea55  
       2016-02-29 11:38:39 +08:00   ❤️ 1
    楼主可以搜索一下这个
    GitHub - ACRA/acra: Application Crash Reports for Android
    https://github.com/ACRA/acra

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

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

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

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

    2. debugCompile 集成发送部分,安装监听 app 。被调试应用通过 aidl 发送日志到监听 app 。
    joshz
        10
    joshz  
    OP
       2016-03-01 09:29:46 +08:00
    @clanned ,学习了。期待你的开源项目。
    814084764
        11
    814084764  
       2016-03-01 12:04:48 +08:00
    可以参考设置里面的显示 CPU 信息的那种 view 去搞。就是在外面套一层 view 。不知道可以不可以。
    joshz
        12
    joshz  
    OP
       2016-03-02 21:03:25 +08:00
    @814084764 ,你是说开发人员选项——显示 CPU 使用率的那种半透明小字的显示信息?其实 ghost log 就是这样显示的,我就是嫌它比较笨重,这种半透明的显示方式看着也挺糟心的。
    joshz
        13
    joshz  
    OP
       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 本身可配置选项很多。要注意的是这种调用是一次性的,所以应该选择一个良好的调用时间点以尽可能多地显示关键日志。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3401 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:08 · PVG 19:08 · LAX 04:08 · JFK 07:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.