如何給安卓模擬器使用宿主機代理
此文章僅為對一次問題解決經(jīng)歷的記錄,旨在以后遇到相同問題時能快速找到解決方案,并非權(quán)威教程。
一、起因
在使用安卓模擬器時(筆者使用的是藍疊模擬器),由于游戲的原因,需要給模擬器掛上代理。我的PC上已經(jīng)有開放的代理端口,再在模擬器中安裝第三方代理軟件會很麻煩而且很不優(yōu)雅。既然有現(xiàn)成的端口,那就好好利用起來吧。
二、歷程
在安卓的真機上是能直接再連接的wifi設(shè)置中配置http代理的,于是我也嘗試在模擬器的設(shè)置中找到網(wǎng)絡(luò)設(shè)置
然而無奈遇到了第一個問題

問題一:藍疊模擬器屏蔽了網(wǎng)絡(luò)設(shè)置功能,設(shè)置中找不到網(wǎng)絡(luò)相關(guān)的選項
出現(xiàn)問題后,我首先是在模擬器的設(shè)定尋找了一遍

但也未找到網(wǎng)絡(luò)相關(guān)選項。但是突然發(fā)現(xiàn)的adb選項啟發(fā)了我:是否可以通過adb來設(shè)置模擬器的網(wǎng)絡(luò)代理?
在網(wǎng)上查了一會后發(fā)現(xiàn)可行,動手開干。
下載adb:
解壓后放入喜歡的路徑,然后將adb的路徑加入用戶環(huán)境變量,這樣就能直接在cmd或者powershell中使用adb了
嘗試連接結(jié)果出現(xiàn)了第二個問題

問題二:adb shell顯示有多個設(shè)備
根據(jù)報錯,大概就是adb檢測到有多個安卓設(shè)備,不知道要連接哪一個,所以先使用
查看到底有幾個設(shè)備

顯示有兩個設(shè)備一個為5554一個為5555。模擬器adb選項上提示我們要連接5555端口,那就加上-s選項來連接localhost:5555這個設(shè)備

連接成功
使用如下命令設(shè)置代理
由于PC上的代理端口是開在127.0.0.1:7890上,于是我想當(dāng)然的把代理設(shè)置為
但是發(fā)現(xiàn)上不了網(wǎng)。
思考一番后明白了:對于安卓模擬器來說,127.0.0.1這個ip指向的是安卓模擬器本身,而非PC。安卓模擬器本質(zhì)是虛擬機,虛擬機使用宿主機網(wǎng)絡(luò)是有幾種不同方式的。但是模擬器設(shè)置和信息中我并未找到相關(guān)信息。于是出現(xiàn)了第三個問題:我無法知道在模擬器視角下,PC的局域網(wǎng)IP地址
問題三:不知道代理的IP該設(shè)為多少
經(jīng)過一段時間的資料查找后,我想到很多時候dns會設(shè)置為默認網(wǎng)關(guān),這樣就順藤摸瓜能找到PC的IP地址。
使用
查看模擬器的dns設(shè)置

其中8.8.8.8為谷歌的dns服務(wù)器。
10.0.2.3為本地局域網(wǎng)IP

所以10.0.2.3就是我們要找的。
重新設(shè)置模擬器的proxy
回到模擬器,測試網(wǎng)絡(luò)

成功
三、后記
折騰完之后成功下載了游戲,但是突然不知怎的索然無味。
也許很多時候,折騰這件事本身就足夠有趣了。很多看似很復(fù)雜很麻煩的事情,拆解下來都是一個個簡單的小問題,解決完所有問題后帶來的成就感是無與倫比的。
P.S.
文中如有錯誤請在評論區(qū)指出,希望大家不吝賜教
我到最后也沒搞清楚為什么一個模擬器會有兩個device。這兩個device連接上后都是指向模擬器的......非常奇怪,希望有大佬解答一下