解决小米/红米手机无法进行jdwp调试的问题

问题描述:在逆向一个app,研究环境是一台红米2,需要使用jdwp接口,也就是ddms下面这个界面:

但神奇的是,同一台主机上,模拟器的进程可以显示在ddms界面上,红米2确一个进程都没有显示出来。cmd里使用 adb jdwp 命令,也没有显示任何接口。

通过简单搜索发现,一个app进程要能被jdwp客户端调试,要不就是编译的时候主配置文件需要开启  android:debuggable="true" ,要不就是系统 boot.img 里的一个文件  default.pro 里的 ro.debuggable 需要值为 1, 后者可以使所有app 进程可以调试, 根据网上的做法用 apktool 工具反编译目标 app,将其主配置文件加上 android:debuggable="true" 再重新打包,然后安装到红米2 ,然而 adb jdwp 依然显示没有接口。

遇到这种情况,就需要研究下 adb 和 jdwp 的原理了,根据android源码  system/core/adb/jdwp_service.c 的注释的说明,基本了解了adb 和 jdwp 是什么回事,大概是这样的,adb 有3种角色(代码是一套,编译选项和运行选项有不同):adbd,adb client, adb server,  adb client 最简单的就是调试时在 cmd 里敲入的 adb 命令,这时候跑的就是 adb client 的代码,另外,ddms 或者 eclipse 或者 android studio 里的 debug 界面,其实也是一种 adb client , 它们都是接受用户的命令,然后发送给 adb server.  adb server 是调试端(如PC端)的一个服务进程,它接受 adb client 的命令,然后发送给设备或模拟器里的 adbd 进程。 另外,设备里根据配置可能会启动一个  adbd daemon 进程,这个进程负责响应adb server的命令,向android系统请求各种数据后返回给adb server,adbd 与adb server的交互可以用 tcp 的方式或者 usb 的方式。 jdwp 是一种java调试协议,在android的实现里边,如果开启了调试(前面说的两种情况至少满足一种),则进程内部虚拟机会启动一个 JDWP 线程,然后这个线程会跟 adbd 进程有一个unix socket的交互,交互的结果就是adbd内部维护了一个可以调试的目标app 进程列表,这样当 adb client 敲入 adb jdwp 后, adb server 将命令传给 adbd , adbd 就可以返回一个进程列表给 adb client 显示了。

adb client (debugger) , adb server, adbd, jdwp 4 者关系如下:

jdwp 线程和adbd 的 unix socket 连接可以通过命令查看:

了解了上述原理之后,首先可以确定一下,设备内部的jdwp调试路径是否正常,方法就是先安装原生的app(没有开启调试), 然后 busybox netstat -xa | grep jdwp 查看,发现果然没有连接,接着,用 apktool 反编译,修改后再打包安装,再用同样的命令查看,发现出来几个连接了,这时候可以基本判断,app 的修改是有效的,而且内部启动了jdwp线程且已经注册到了 adbd 进程内。

接下去的问题就是,为什么PC端的 Adb client 在跟 Adbd 请求的时候没有能返回列表,而如果请求的是模拟器,又是正常的。

红米2真机和模拟器的区别,主要就是 Adb server 和 adbd 的连接方式不一样,前者是USB的方式,后者是tcp的方式,而且有一个现象是,连接红米2后,adb devices 会提示出现两个设备,明明只有一个设备嘛! 既然有两个设备,就看一下设备管理器是什么情况,果然有发现:

android phone 设备下有两个驱动,搜索一下 xiaomi mdb ,果然有情况 :

小米mdb方案分析

android如何杀掉守护进程——干掉小米手机助手

小米助手不用打开usb调试能连接手机的小研究

原来小米/红米有一套 mdb 方案,可以实现小米助手在手机不开usb调试的情况下仍能连接手机(之前安装过小米助手,不确定mdb驱动是不是那时候安装的),不管三七二十一,在设备里找到 mdbd 进程,杀死它,发现能自动重启,又回到PC里边,把 MDB 驱动卸载了,重启系统之后,再次 Adb devices 发现只有一个设备了,再 adb jdwp ,发现居然能显示列表了:

打开ddms也能正常连接了,看来果然是小米的 mdb 驱动造成的。

时间: 2024-12-16 12:43:27

解决小米/红米手机无法进行jdwp调试的问题的相关文章

红米手机真机调试问题记录

1.先打开红米手机上面的USB调试选项 方法:打开红米手机的USB调试,可能其它一些机器有一些不一样,先打开[系统设置],切换到[全部设置]tab页,打开最下面的[关于手机],里面有一项是[Android版本],在这个选项上面连按4-5次,才会打开[开发者选项],此时回到外面的[全部设置],你会发现之前的[关于手机]上面多了一项[{}开发者选项],点进去研究下吧,里面有[USB调试]开关.也许是Android4.0之后都是这样的?!没有去所有的手机上面验证过,但是ROM应该是可以修改的. 2.打

(最详细)小米手机5c的USB调试模式在哪里开启的经验

经常我们使用安卓手机链上PC的时候,或者使用的有些app比如我们学院营销团队经常使用的app引号精灵,以前的老版本就需要开启USB调试模式下使用,现经常新版本不需要了,如果手机没有开启USB调试模式,PC则不能够成功识别我们的手机,部分app也不能够正常使用,此情况我们需要找解决方法将手机的USB调试模式打开,以下内容我们描述小米手机5c如何开启USB调试模式的教程.首先在小米手机5c应用程序界面点击<设置>ICON,进入小米手机5c系统<设置>界面.接下来点击设置界面上的我的设备

解决小米手机不能运行Android Studio程序的问题

转载自:解决小米手机不能运行Android Studio程序的问题 问题描述 Android Studio升级到2.3版本之后,小米手机MIUI8不能运行Android Studio程序,报如下错误: Installation failed with message Failed to establish session. It is possible that this issue is resolved by uninstalling an existing version of apk i

android 解决小米手机上选择照片路径为null情况

下返回的路径 为null,在网上搜索了下解决方案,现在把解决方案记录下: 这是在onActivityResult方法中执行的, [html] view plain copy print? if (data == null) { return; } uri = data.getData(); uri = geturi(data);//解决方案 String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery

(最完美)小米手机6X的Usb调试模式在哪里打开的流程

就在我们使用安卓手机通过数据线链接到PC的时候,或者使用的有些工具比如我们学院营销小组就在使用的工具引号精灵,以前使用的老版本就需要开启USB开发者调试模式下使用,现就在新版本不需要了,如果手机没有开启USB开发者调试模式,PC则不能够成功检测到我们的手机,部分工具也不能够正常使用,这个时候我们需要找处理方法将手机的USB开发者调试模式开启,如下资料我们描述小米手机6X如何开启USB开发者调试模式的步骤. 首先在小米手机6X应用程序界面点击"设置"icon,进入小米手机6X系统&quo

(最简单)红米手机3S 3X的usb调试模式在哪里打开的流程

就在我们使用安卓手机链上pc的时候,或者使用的有些应用比如我们团队营销部门就在使用的应用引号精灵,之前老版本就需要开启usb开发者调试模式下使用,现就在新版本不需要了,如果手机没有开启usb开发者调试模式,pc则没法成功检测到我们的手机,部分应用也没法正常使用,这时我们需要想方设法将手机的usb开发者调试模式开启,如下资料我们叙述红米手机3S 3X如何开启usb开发者调试模式的步骤. 第一步,在红米手机3S 3X应用程序界面启动设置图标,进入红米手机3S 3X系统设置界面. 然后,点击设置界面上

红米手机电信版维修记

原因:手机有时打不出电话,也接不到,通讯信号显示不稳定,[请求认真测试,对小米的产品和服务负责] 说明:红米手机电信版到货用了没几天,周围办公室同事说,我的电话有时总是打不通,打的时候提示“无法接通”.后来,我自己尝试往外打,经常出现拨号无任何声音,最后提示“通话中断”. 维修过程:1.最开始通过电话和客服沟通,说让更新下系统,更新最新版本的固件31仍不能解决. 评价:服务不到位,电话最后还提醒多打点分,处理完了也没有回访,之前有用过小天鹅的洗衣机,不会用人家上门教完之后,还有回访问用得好吗,有

解决小米3无法连接到Eclipse

作为小米的忠实用户,你的小米手机无法连接使用USB调试,无法连接电脑下载应用和游戏,是不是让你很揪心? 作为手机开发者,你的小米手机无法连接到Eclipse进行应用开发,是不是让你很揪心? 下面简要介绍一下我的解决步骤,也是在Eclipse时进行了无数次的尝试和寻找答案. 一.首先你要打开手机的USB调试,有人这第一步就没有完成,找了半天问题,岂不是白费功夫. 步骤如下: 1.选择"设置"应用. 2.选择开发者选项 3.有人说,我的手机没有开发者选项,那么请在"关于手机&qu

我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信

1.请您在桌面下.点击手菜单键-全局搜索,输入网络助手,点击流量排行,点击批量联网控制,查看该软件下(不能上网的应用)wifi和流量2G/3G下方的选项是否都勾选的.如果没有勾选,请您勾选. 2:仍然不行.请您进入系统设置-应用程序-该应用-清除数据,或者卸载该软件,开机后进入应用超市重新下载安装该软件,尝试恢复. 更详细的描述问题有助于网友理解你遇到的麻烦,帮助你更准确的解决问题.谢谢你支持小米手机! 如何打开USB调试.这个问题,有些亲知道,像我这样的2B也是才知道,就是在,关于手机,双击,