Android 下如何优雅地离线调试(查看日志)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
joshz
V2EX    Android

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

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

    首先忏悔下写了这么个知乎范的标题,不过“优雅”真的就是我所想要的词。本人 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
    < href="/member/yov123456" class="dark">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
       201-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     Solana     1032 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 23:34 PVG 07:34 LAX 15:34 JFK 18:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86