遭遇 Android 模擬器的網卡 DNS 設定錯誤無法上網的修正

如果按照標題的概念來看,其實網卡的 DNS 設定錯誤,仍然是可以上網的…

But…

所有的連線都要轉成 ip 位址的方式。

 

But… 

不會有人去記住要使用的網站 ip 吧! 

 

好,就算記住了,Android 系統的相關連線服務也還是靠 DNS 才能正確連線使用阿…所以還是來知道一下怎麼處理吧!

 

不過,會遭遇這種情境是比較弔詭點,通常是本身電腦環境的外在網路環境設定有大改變,才會發生這種抓取 DNS 錯誤的情況。

例如:
已經在電腦上安裝好 Android 的模擬器,或是因為開發 App 需要安裝 Android 的開發環境而設定的 Android 模擬器。

然後這台電腦環境的以外的網路環境設定改變,像是 DHCP 硬體升級/異動、Route 軟硬體升級/異動…或甚至是較為極端的該組織是使用還原系統的電腦。


可能都會遇到類似這樣的問題。

最顯而易見的結果如下:

開啟 Android 模擬器後其實就發現有網路不通的小圖示,但若仍不死心開啟 Chorme 瀏覽器試試看。

 

最後測試的結果,就是顯示網頁讀取失敗,而錯誤訊息中也透露出端倪,將問題指向是 DNS 設定錯誤的方向,這樣就比較知道如何解決。

 

在 Android 的模擬器中打開 WiFi 的設定:

就可以很明顯地看到 DNS 跟 DHCP 抓到的設定,完全不同。

 

所以,只好請出 Android 的 Adb 管理工具來處理了,正常來說 Android Adb 應該都位在 Android SDK 的安裝路徑底下的 platform-tools 資料夾中。

 

如果是 Visual Studio 的使用者

可以在 "工具" → "Android" → "Android Adb 命令提示字元" 來啟動。

 

進到命令提示字元後,首先使用 "adb root" 取得 adb 的管理者權限。

在透過 "adb shell" 進入 Android 模擬器的指令管理。(此時要更改的 Android 模擬器要是保持開著的狀態)。

接著再繼續輸入 "setprop net.eth0.dns1 1.1.1.1"。

其中:
setprop 是 adb shell 的指令。
net.eth0.dns1 是裝置的名稱,可以透過 "getprop | grep eth0" 看到有關 eth0 的所有網路設定。
1.1.1.1 是實際存在的 DNS 服務主機的 ip 位址,像是 Google 的 8.8.8.8 or 8.8.4.4 也都可以使用。

 

接著再回到 Android 模擬器中,關閉 WiFi 再開啟,進行重新連線一次。

 

再次進入到 WiFi 設定中確認,看到 DNS 已經變更成剛剛設定的 ip 位址。

 

當然,透過 adb shell 還可以透過指令,設置 Android 模擬器的很多不同設定,有興趣可以參考
https://adbshell.com/

 

參考資料:

Android shell 命令设置(获取)IP地址、网关、dns
https://blog.csdn.net/liuqz2009/article/details/52094154


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。