把logcat日志实时显示到电脑浏览器上,是不是很酷!
做Android开发,如果不能插着usb,看着logcat。你会觉得少一只手一样很不方便。
但是现实中确实有这种情况,比如本人在做的hud(汽车上用的“抬头显示”)项目是通过usb线把手机上的数据投到hud设备上(这样我们就不能用usb口连接adb查看logcat了)。首先我们想到的是把日志写文件,再把usb线插在电脑上,pull出日志,再分析日志。这效率,可想而知。。。往往我们希望可以连着手机看logcat的日志,今天我们聊聊有哪些方案,以及哪个方案更适合你。
想了解hud的,见这里,顺便给我们公司的产品打个广告:
车萝卜 智能车机导航 HUD抬头显示 智能语音手机支架 安全预测仪 青春版+车小蜜(灰)
方案一(无线连接adb)
1 | adb tcpip 5555 (端口号) |
这种方案,就三个字:“不方便”!要经常切换。而且不稳定,经常断线,不知道原因。
方案二RemoteLogcatViewer
最初,当我在网上找到了这个方案,简单高兴得要哭了。
只要手机和你的电脑在同一个局域网网段,就可以无线实时地查看手机上的logcat日志。这个方案的技术实现也比较好理解,在手机里建立websocket server(以下都用ws server代替),电脑上通过ws client连接来查看。
而且,如果不希望修改现有项目,可以新建一个其他的项目依赖本库,然后通过配置相同的 android:sharedUserId=”” 和签名相同, 可以在新app运行时中读取所有sharedUserId相同的 log。这个feature简直是锦上添花!完美!
但是用过之后。我遇到了三个问题:
- 加上sharedUserId之后,不能覆盖安装。
- 连接老是断开。也许,我要做app要保活?太忙了,没时间尝试。
- 和领导提过这个方案。他也觉得很赞,问我如果用户的手机上遇到bug,能不能实时看到他的日志。显然,这个方案不太好实现这个功能。因为server的实现在手机上。
所以,最后我只在自己的demo里用这套方案,并且,做了一些小的修改,见我的fork RemoteLogcatViewer forked by 本喵
方案三(今天重点要说的,灵感来源于RemoteLogcatViewer)
Demo及代码实现见这里RemoteLogDemo
本方案的server端可以在外网服务器上,也可以是同局域网内的一台电脑。
配合log-client、log-server一起使用。
数据流大概是这样的
logcat --> log-server --> log-client
。- app跑着ws client,负责把自己的logcat日志发给log-server。
- log-server是部署在服务器上,跑着ws server,负责将app上logcat的日志,转发到log-client
log-client运行在开发者的电脑上,也跑着ws client,负责查看日志。
log-server、log-client都是nodejs来实现的。app的ws使用ok-http来实现。
使用方法
- 先运行log-server 。如果部署在外网会比较方便,可以一直开着。
- 打开log-client,输入要过滤的字符串( 正则表达式过滤)。
打开app,可以像我的demo一样程序启动就连接ws-server(记得加上BuildConfig.DEBUG)。如果是release版本,最好把该功能隐藏,可以通过后门开启。
android app中执行
Log.i(TAG, System.currentTimeMillis() + "");
log-client可以看到相应的输出
- todo list
- 日志写文件
</div>