安卓调试新纪元

Android Debugging

安卓调试新纪元

dfef0ad487d8f56750dd385ecfb5d246.png

8493f7c31f46b8d73de9f4ee22ac6a50.png

安卓(ANDROID)是在手机、平板等移动设备上流行的软件系统。内核使用的是LINUX,有特色的部分主要在用户空间,也就是所谓的Android Framework。

0fe50848e6f735f4ff7fc99bcff68514.png

长期问题

39d8628131a2d48e0be4f379f24fdf74.png

因为安全方面的考虑,一般不能直接在安卓系统本机运行终端程序,只能通过adb的方式从另一台机器连接,进行有限的一些操作。而adb方式在产品阶段一般也常被禁止掉。

如果要使用gdb的话,那么一般要在安卓系统里运行gdbserver,然后在另一台机器上远程调试。

因为安卓系统的libc是谷歌开发的bionic,不是流行的glibc,所以gdbserver也不是随便找一个就能用,一般要是安卓系统的相同构建环境构建出来的(“原配”)。

4e92d43889b26ba207c7618ff0d3ddf0.png

一核双头

9305f164b7db3bf4019fce2a3e7020fb.png

去年在解决幽兰代码本上如何支持微信的问题时,格蠹的小伙伴尝试了很多种方法。综合评估后,基于Waydroid容器的方法脱颖而出。

Waydroid是和Docker类似的容器技术,都是基于Linux内核的cgroup机制实现的。使用Waydroid,可以把安卓系统运行在Linux内核之上,仿佛给Linux内核又长出一个头来。

d1f1cc096dec9f51d8be5c3c9a2e86c2.png

803ccf15b06ed5c5b6d804106c081807.png

上帝视角

3df8b1515c895e61005dc69d0b0a7388.png

有了Waydroid方案,就可以直接把安卓应用的APK安装包复制到幽兰代码本上,简单双击就可以安装,参见格蠹小伙伴写的文档:《在幽兰上安装微信》( https://www.nanocode.cn/wiki/docs/youlan/wechat  )。

更重要的是,以这种方式运行安卓后,所有的安卓进程都可以在Linux系统中看到,执行以下top或者ps等命令,就一目了然。

比如,下面是启动微信后,执行top命令,可以看到微信的界面进程排在top进程列表第一个。

5e8c436b4c322fa60e957b590cbf9289.png

10年前在英特尔工作时,有一段时间是要调试安卓应用的,当时不得不依赖远程连接的方法,必须使用adb才能看到看到安卓的进程,感觉总是隔了一层。也感觉安卓的进程一个个都桀骜不驯,一个个仿佛高高在上似的。所以当我第一次看到它们都乖乖地出现在普通的top窗口里时,感觉非常痛快。

要知道,adb小虽然也可以执行ps、top等常用命令,但都是被谷歌阉割过的版本,少了很多功能,很是不爽。

45f7de87e38ce861adc8af4a06ef09a6.png

降维调试

def75c237ae95fd911eca43c2647d279.png

当然,老的格友可能已经猜到,还有一个超爽的好处,那就是可以直接上gdb了。

比如,启动微信后,打开一个终端窗口,ps -A找到微信的进程ID,然后一条sudo gdb --pid就可以调试微信了。

1e9140b3df351b595f0389779fb3c748.png

我正是用这种方法,找到了微信进程的几个问题,特别是段错误和高功耗的问题。

93b8b90e5d0443191a46d32f2d450ee7.png

51734b22c0103af6792ae120d4805087.png

值得说明的是,上述方法不仅可以调试安卓应用,还可以调试安卓的后台服务,也就是所谓的安卓框架。当然也包括调试安卓的基础库,比如bionic,Dalvik等。

好的软件是调试出来,一个不方便调试的系统会大大制约软件开发的效率。安卓系统为了安全性牺牲了普通Linux系统的灵活性和很多调试能力。

上面介绍的调试方案,不需要网络,不需要gdbserver,不需要虚拟机,可以在同一台物理机器上以“上帝视角”看到所有安卓的进程,直接访问安卓系统的所有文件,而且可以直接上gdb调试器,这绝对是把安卓系统的调试效率提升到了一个新高度。

本周三晚上,我将以直播方式演示这种新的调试方法,欢迎感兴趣的同行上线交流。

67539881a92e470f115a8accf5d82bae.png

1

END

1

正心诚意,格物致知

人文情怀审视软件,以软件技术改变人生

24bf9603c6e6655e30ccd3dfb4208e48.png

格友公众号

d7220cd0e0f3c830a9ace2658a881a41.png

盛格塾小程序

扫描上方二维码或在微信中搜索“盛格塾”小程序

可以阅读更多文章和有声读物

往期推荐

编程玩数学,两脚一起跑

LINUX平台高级调试和优化(2024庐山站)

前方遇到硬钉子——顽石、USB和DMA

学好UEFI,实现从工程师到架构师的跨越

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值