写于:2014-05-29	最近一次更新:2017-10-20

Intent:

adb 使用 wifi调试,摆脱 usb数据线 的束缚

Oneway:

临时办法,不需要root手机,手机重启后失效: 以下命令是在电脑上执行 adb tcpip 5678 #指定tcpip模式调试使用的端口5678 adb connect 10.243.96.123:5678 #通过IP连接手机,手机当前的IP是10.243.96.123 此时再执行adb devices可以看到多了一个通过IP连接的手机,此时可以拔掉usb数据线了 永久办法,需要root手机,设置后手机重启依然有效: 以下命令是通过电脑进去手机shell环境后提升到root权限执行, mount -o remount,rw /system echo 'service.adb.tcp.port=5678' >> /system/build.prop reboot 手机重启完成后使用这条命令连接手机 adb connect 10.243.96.123:5678

Details:

进行以上操作前的准备工作: adb devices #保证能看到待调试手机,并有使用权限 使用各种工具root手机,手机root成功之后,可以通过下面两种方式使用手机的root权限 1: adb root adb shell 2: adb shell su adb使用IP方式调试手机时,在connect环节需要知道手机的IP地址, 可在路由器中设置DHCP静态地址分配,为手机分配固定的IP地址 adb使用IP方式调试手机时,电脑需要能ping通手机IP, 如果ping不通手机IP,请检查路由器无线设置中是否开启了"AP隔离", 如果开启了"AP隔离",请调整为关闭 adb使用IP方式调试手机时,需要保持手机"开发者选项"开启和"USB调试"开启

Trouble:

提示Unexpected exception 'Cannot run program "/usr/local/adt/sdk/platform-tools/adb": error=2,No such file or directory' while attempting to get adb version from '/usr/local/adt/sdk/platform-tools/adb' 或者提示Failed to start emulator: Cannot run program "/usr/local/adt/sdk//tools/emulator": error=2, No such file or directory 或者执行命令adb devices时,提示找不到设备, 或者adb命令无法执行,提示sdk/platform-tools/adb: No such file or directory

Oneway:

这类错误大都出现在64位的系统中,因为adb是32位的程序, 并且只有32位的adb(使用命令file ./adb即可看出adb为32位程序), 要运行adb需要安装32位的lib库支持,在slackware中可通过安装multilib解决。 类似还有wine,fastboot等,当前只支持32位系统, 安装multilib后即可很好的运行这些32位程序.

Trouble:

在真机测试中运行工程时发生错误,Android的Console中提示: No active compatible AVD's or devices found. Relaunch this configuration after connecting a device or starting an AVD.

Oneway:

运行命令adb devices查看设备状态,得到如下信息: List of devices attached ???????????? no permissions 得知问题是出在权限上 DDMS的Console中提示: insufficient permissions for device com.android.ddmlib.AdbCommandRejectedException: insufficient permissions for device at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:752) at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:373) at com.android.ddmlib.Device.executeShellCommand(Device.java:453) at com.android.ddmuilib.SysinfoPanel$1.run(SysinfoPanel.java:204) at java.lang.Thread.run(Thread.java:722) 从DDMS的Console提示“ insufficient permissions for device”中也可知“设备没有足够的权限” 故解决办法是:在/etc/udev/rules.d/目录下新建一个文件,文件中写入 SUBSYSTEM=="usb",ATTRS{idVendor}=="12d1",ATTRS{idProduct}=="1038",MODE="0666" 然后插拔一下USB数据线就行了(这个是关键,一定要重新插拔一下) (该解决办法同时适用于普通用户在手机的工程模式下使用fastboot线刷方式刷机时, 提示no permissions fastboot的问题,但是,注意, 此时用lsusb命令得到的idVendor和idProduct在和正常开机模式下得到的数据很可能不一致,要特别注意; 一般,想要adb和fastboot这两个命令同时正常使用, 需要在开机模式和工程模式下分别执行lsusb命令,然后, 将得到的数据分两行写入,一行是开机模式下得到的idVendor和idProduct, 一行是工程模式下得到的idVendor和idProduct) 其中,12d1是手机设备供应商的ID,1038是产品ID号 可通过下面这种方法得知手机设备供应商的ID和产品ID号 首先手机不连电脑,运行一下命令lsusb,结果如下: Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 003: ID 05c8:030d Cheng Uei Precision Industry Co., Ltd (Foxlink) Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 002: ID 1d57:ffa4 Xenta 然后,手机连上电脑,再一次lsusb,结果如下: Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 003: ID 05c8:030d Cheng Uei Precision Industry Co., Ltd (Foxlink) Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 002: ID 1d57:ffa4 Xenta Bus 002 Device 012: ID 12d1:1038 Huawei Technologies Co., Ltd. 对比结果可知:我的华为手机设备供应商的ID是12d1 如果adb devices 还不能显示连接的手机,List of devices attached一片空白, 请运行./sdk/tools/android update adb,会在当前用户home目录下 自动生成adb_usb.ini文件(亦可直接建立adb_usb.ini文件),在文件中写入 供应商的ID,此处ID前需加0x(零和小写字母x,表示是16进制), 写入内容如下:0x12d1,重启adb,再次插拔usb,此时adb devices就能显示了 (若用的是小米手机米3,米3无法使用adb devices,米3无法使用adb shell时 就在adb_usb.ini文件中写入0x2717即可) (若依然不能使用adb调试米3,请确保已打开米3开发者选项中的USB调试模式, 然后在拨号界面输入*#*#717717#*#*,进行Diag USB port enable/disable切换, 提示enable或者disable后,插拔USB数据线后手机上提示允许USB调试吗的对话框, 点击确定即可。