android項目最近開始用到socket通訊,而2個模擬器之間通訊需要借助ADB實現,這里了解下ADB。
ADB是什么:
ADB的全稱為Android Debug Bridge,就是調試橋的作用,借助這個工具,我們可以管理設備或手機模擬器的狀態。個人理解就是可以在pc上通過命令行查看和管理安卓設備,例如連接到電腦的安卓手機等。比較方便的是可以直接通過命令行操作。
常見操作:
(1)快速更新設備或手機模擬器中的代碼,如應用或Android系統升級;
(2)在設備上運行Shell命令;
(3)管理設備或手機模擬器上的預定端口;
(4)在設備或手機模擬器上復制或粘貼文件。
詳細參考:Android的ADB工具使用
因為需要在2個模擬器之間通訊,這里我們啟動2個模擬器,通過adb查看2個模擬器的狀態和IP端口地址等信息。
在命令行中直接輸入“adb”命令提示無法識別,來到SDK的Tools文件夾下,發現存在一個“adb_has_moved.txt”文件提示adb被移除了,百度后發現該adb在新版本中已經移動到了“platform-tools”目錄下,果然在platform-tools目錄下找到了該adb,在環境變量Path中加入該路徑。
然后命令行中執行adb命令就可以識別了:
OK 先一步使用ADB查看模擬器當前配置狀況
啟動2個模擬器api版本都是10(plat版本2.3.3) 5554運行socket服務端 5556運行socket客戶端
首先進入emulator5554設備的命令控制台
在命令行中輸入如下指令
adb –s emulator-5554 shell
getprop
在結果中找到以下2行“
[net.eth0.dns1]: [10.0.2.3]
[net.gprs.local-ip]: [10.0.2.15]
exit退出shell
如上繼續查看emulator5556的ip配置會發現二者完全相同,那么如何進行通訊呢
Android系統為實現通信將PC機IP設置為了10.0.2.2,自身為10.0.2.15/127.0.0.1,所有安卓虛擬機默認是可以通過10.0.2.2本機聯網。
如果需要修改dns可以執行
setprop net.dns1 192.168.0.1
那么IP如何修改呢?二者的IP完全相同是無法通訊的:
據資料顯示可以通過件端口映射到本機間接實現 (參考 PC電腦和Android模擬器訪問及模擬器之間tcp/udp通信 )
1. 運行模擬器
2. 打開window 命令行
5554是模擬器的端口,執行之后會進入android console
telnet 127.0.0.1 5554
或者
telnet localhost 5554
3. 在console下執行:
redir add udp :端口號:端口號
或
redir add tcp :端口號:端口號
例如:
redir add tcp:8888:8888
其中,第一個端口號是PC端口,第二個是模擬器端口。(端口映射)
執行此命令之后,會把PC8888 端口接收的數據轉到模擬器的8888端口
redir :端口定向指令
add :添加
tcp/udp:表示端口類型tcp、udp
說明:redir list命令來列出已經添加的映射端口,redir del可以進行刪除
通訊代碼案例參考:
http://blog.163.com/fanning_7213/blog/static/2496505201137101721665/
最終還是通訊失敗,經驗證PC和仿真器通訊時不需要重定向端口,直接使用本機IP即可。