我原來一直不用Android的模擬器,由於這東西的多年前的印象真的是很糟糕——啓動半個小時,不支持OpenGL。即便後來有了x86鏡像,在HAXM的支持下快的飛起,也不想用,由於NDK還要編譯x86的。那個時候我一直用網易的MuMu模擬器——只須要編譯Armv7的就好了。再後來就是網易的所有Mac App不知道抽了什麼風,瘋狂寫log,直到寫滿硬盤爲止,我就把MuMu給刪了,同時也擺脫了這玩意動不動就啓動不起來的煩惱。android
如今的Android模擬器仍是不錯的,那就用一下吧。web
在Mac上HAXM是不須要裝的,即便裝了也沒用。macos
https://docs.microsoft.com/zh-cn/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?pivots=macos網絡
先裝了一個Oreo(Google Play),什麼鬼,用了10G的磁盤空間,即便禁止熱啓動也沒小多少,而後竟然不能上網!網上一查,都是說要改DNS,還要root。app
好吧,我知道Google的套件就是費空間,裝個乾淨的吧,Q(Android 9.+),反正我也不用Google API,這回好些了,佔用4G磁盤。測試
而後我又裝了一個Android 6.0的鏡像,佔用5.2G磁盤,Android果真是垃圾堆——你會發現隨着Android版本的增長,佔用磁盤愈來愈少——或者說Google把原來的福利套件都移除了?this
關鍵是,這個能直接上網!code
比較一下就能發現,Android 6.0的鏡像沒有虛擬WiFi,直接用宿主機來上網server
而從Android 7.0開始,虛擬了一個NAT網絡,如下截圖是Android 9.+的blog
所謂的改DNS的緣由就是以下:
理由就是,這是個什麼見鬼的DNS,反正改一下就能上網了……
可是,即便我認爲Android再垃圾,我也不認爲測試團隊能讓這種事情發生——不能上網,而且從7持續到了9。而且,即便改DNS能解決問題,也不是個好方法——若是指向局域網的DNS(基本上就是網關或者路由器的地址),當你換一個環境難道再改一次DNS?
那麼這個奇怪的DNS是什麼,由於Android的官網很差打開,我複製了一下相關內容:
At startup, the emulator reads the list of DNS servers that your system is currently using. It then stores the IP addresses of up to four servers on this list and sets up aliases to them on the emulated addresses 10.0.2.3, 10.0.2.4, 10.0.2.5 and 10.0.2.6 as needed.
On Linux and OS X, the emulator obtains the DNS server addresses by parsing the file /etc/resolv.conf
. On Windows, the emulator obtains the addresses by calling the GetNetworkParams()
API. Note that this usually means that the emulator ignores the content of your "hosts" file (/etc/hosts
on Linux/OS X, %WINDOWS%/system32/HOSTS
on Windows).
When starting the emulator at the command line, you can also use the -dns-server <serverList>
option to manually specify the addresses of DNS servers to use, where <serverList>
is a comma-separated list of server names or IP addresses. You might find this option useful if you encounter DNS resolution problems in the emulated network (for example, an "Unknown Host error" message that appears when using the web browser).
意思就是,模擬器會把宿主機的DNS依次複製到10.0.2.3,10.0.2.4,10.0.2.5,10.0.2.6,按理說這麼作沒問題啊。因而我打開了系統的DNS
可是個人/etc/resolv.conf是這個樣子的,難道IPv6優先?系統信息裏明明IPv4的地址在前面。
緣由就很明顯了,那個IPv6的DNS是什麼鬼,而後我把路由器的IPv6的功能一關,重連WIFI,重啓模擬器,問題解決了。
總結:如今國內的IPv6一團麻,根本不知道是個什麼狀況,乾脆先禁用一陣子。