joshz
V2EX  ›  Android

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

  •  
  •   joshz · Feb 29, 2016 · 16833 views
    This topic created in 3762 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    13 replies    2016-03-05 13:10:33 +08:00
    zhea55
        1
    zhea55  
       Feb 29, 2016   ❤️ 1
    楼主可以搜索一下这个
    GitHub - ACRA/acra: Application Crash Reports for Android
    https://github.com/ACRA/acra

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

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

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

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

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

    其实就是在应用内需要“显示”日志的时候调用 logcat 输出过滤日志,再设置 TextView 的内容即可。相比我说的方案一,不再需要维护两份输出信息, logcat 本身可配置选项很多。要注意的是这种调用是一次性的,所以应该选择一个良好的调用时间点以尽可能多地显示关键日志。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   879 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 19:56 · PVG 03:56 · LAX 12:56 · JFK 15:56
    ♥ Do have faith in what you're doing.