ADB remote Debug Android App on G1 (Through WiFi)

使用ADB远程无线调试G1 应用程序 (通过WiFi

 

习惯了使用usb连接线在G1手机上debug Android应用程序,今天突然心血来潮想到是不是可以通过无线网络远程调试应用程序?

(如果知道对方ip地址,有可能网络上的手机都有可能被利用哦?)

 

首先咨询一下 高人stevens,Tan博。 Tan博给于肯定答复,下面就是我结合Tan博的手顺在G1上调试实现。

 

1. 首先G1 需要有root权限 关于如何获取root权限,可以参考

http://www.webnetta.com/tag/jfv13/

(后面还可以升级Cyanogen ROM)

 

2. 登陆G1 控制台,这个可以通过 G1 上的Terminal软件,如果 G1 ROM中带busybox的话(Cyanogen ROM 是带的),可以启动telnetd, 然后在PCtelnet登陆,前提是G1和你的PC在一个网络里。这样就可以摆脱在G1上输入命令的不便。

 

# mv /dev/android_adb /dev/android_adb.bk  

* Android 是默认的ADB是使用 USB 作为debug,可以参考代码gdb.c, 重命名这个文件后,adb会尝试使用网络连接。

#setprop persist.service.adb.enable 1

#setprop service.adb.root 1

#setprop ctl.stop adbd

#setprop ctl.start adbd

* 设置adb权限并重起服务

# netstat

Proto Recv-Q Send-Q Local Address          Foreign Address        State

….

tcp        0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN

….

 

此时如果显示 tcp 5555 端口开启表明手机端的设置已经成功了。

 

3. PC上设置环境变量

ADB_TRACE  <= adb

ADBHOST       <= G1手机ip地址,这个必须正确

PATH                <= 增加android sdk tools 路径

 

4. 重起PC 使环境变量生效,然后运行adb server,

# adb nodaemon server

bit_buffer_init 0x33b60

bit_buffer_init 0x34ba0

adb_socketpair: returns (100, 101)

fdevent_update: add 1 to 101

event_looper_hook: call hook for 101 (new=0, old=1)

trCarneatesd depvicoe trhretad

: local client init

transport: client_socket_thread() starting

socket_loopback_server: port 5037 type tcp => fd 102

fdevent_update: add 1 to 102

event_looper_hook: call hook for 102 (new=0, old=1)

_event_socketpair_start: hook 101(pair:100) for 65 wanted=1

_event_socket_start: hooking 102(lo-server:5037) for 1 (flags 41)

adb_win32: waiting for 2 events

socket_network_client: host '192.168.0.188' port 5555 type tcp => fd 103

client: connected on remote on fd 103

transport: 0x36868 init'ing for socket 103, on port 5555

transport: 0x36868 registered

adb_win32: got one (index 0)

adb_win32: signaling 101(pair:100) for 0

bit_buffer_init 0x368f8

bit_buffer_init 0x37938

adb_socketpair: returns (105, 106)

transport: 0x36868 (105,106) starting

transport: 0x36868 install 105

fdevent_update: add 1 to 105

event_looper_hook: call hook for 105 (new=0, old=1)

_teovf_reermnootmt__esr:oe cmskotetater:t pisanigr_ staritinngp utth_trheraeda t

dfa orfrto :rt  rh0aoxno3sk6p 8o16r08t1, ( 0prxae3ia6rd8:i61n80g,0  )fo rnfo omf

r d f 6d15 0 16w0

a6fn

rtoemd_=r1e

m_oetvee:n tt_rsaoncskpeotrpta ir0_xs3t6a8r6t8:  ShYoNoCk  o1nl05(ipnaei r(:21)0

 

6w)ri tfeo_pra c6k9e tw:a n1t0e6d =[14

3a4deb5_9w5i3n 3S2Y: NwC] 0a0i0t0i0n0g0 1f o0r0 0030 0e0v2e n(t0s)

 

fardobm__wrienm3o2t:e :got data pump  for transpor ont e0 x(3i6n8d6e8x

 r2e)a

daxd:b _1w0i3n 302x:3 9sbi1gcn a2l4i

ng 105(pair:106) for 0

read_packet: 105 ok: [434e5953 SYNC] 00000001 00000002 (0)

handle_packet() 1129208147

write_packet: 105 [434e5953 SYNC] 00000001 00000002 (0)

Carlelaidn_gp asckeet: n106d ok:_ c[43o4e5n953n SYNeC] 0c0t000 001

 0000w000r2 (i0) t  e

_to_premaotce: tkranespotrt :0x3 68681 S05YNC  onl[ine

4e584e43 CNXN] 01000000 00001000 (7) 686f73743a3a00  host::.

read_packet: 106 ok: [4e584e43 CNXN] 01000000 00001000 (7) 686f73743a3a00  host:

:.

to_remote: transport 0x36868 got packet, sending to remote

writex: 103 0x3ab4c 31: 434e584e000000010010000007000000  CNXN............

writex: 103 ok

_event_socketpair_start: hook 101(pair:100) for 65 wanted=1

_event_socketpair_start: hook 105(pair:106) for 69 wanted=1

adb_win32: waiting for 3 events

readx: 103 ok: 434e584e000000010010000009000000  CNXN............

readx: 103 0x39b34 9

readx: 103 ok: 6465766963653a3a00  device::.

from_remote: received remote packet, sending to transport 0x36868

write_packet: 106 [4e584e43 CNXN] 01000000 00001000 (9) 6465766963653a3a00  devi

ce::.

raedabd_xw:i n13023:  0gxot3 8oaneec  (2i4n

dex 2)

adb_win32: signaling 105(pair:106) for 0

read_packet: 105 ok: [4e584e43 CNXN] 01000000 00001000 (9) 6465766963653a3a00  d

evice::.

handle_packet() 1314410051

parse_banner: device::

setting connection_state to CS_DEVICE

adb: online

_event_socketpair_start: hook 101(pair:100) for 65 wanted=1

_event_socketpair_start: hook 105(pair:106) for 69 wanted=1

adb_win32: waiting for 3 events

socket_loopback_client: could not connect to tcp:5557    

…..

* abd 会默认尝试 从端口5555 ~ 5587 , 此时5555端口已经连上,因此后面5557 ~ 5587 端口连接不上的错误可以忽略。

 

 

5. 现在就可以在 另一个终端窗口中使用adb 功能命令

 如运行logcat 可以看到以下类似信息(当然也可以adb push 等)

#adb logcat

_adb_connect: host:version

socket_loopback_client: port 5037 type tcp => fd 100

writex: 100 0x23cbc0 4: 30303063  000c

writex: 100 ok

writex: 100 0x41d9a1 12: 686f73743a76657273696f6e  host:version

writex: 100 ok

readx: 100 0x23cb20 4

readx: 100 ok: 4f4b4159  OKAY

readx: 100 0x23cc10 4

readx: 100 ok: 30303034  0004

readx: 100 0x23cc10 4

readx: 100 ok: 30303134  0014

adb_close: 100(lo-client:5037)

_adb_connect: shell:export ANDROID_LOG_TAGS="" ; exec logcat

socket_loopback_client: port 5037 type tcp => fd 101

…..

 

6. 最后运行eclipse ,就可以远程调试你的应用程序了。

需要注意的是由于eclipse android emulator 就是使用ADB的网络连接。

但是经过上面的这些步骤此时ADB已经被定向到了G1手机上,因此eclipse 环境下的target Android emulator 这时就是你实际的G1手机而不是sdk自带的emulator,同时而android sdk自带的emulator也不会被启动。

 

你可能感兴趣的:(eclipse,android,socket,buffer,hook,pair)