我原来一直不用Android的模拟器,因为这东西的多年前的印象真的是很糟糕——启动半个小时,不支持OpenGL。即使后来有了x86镜像,在HAXM的支持下快的飞起,也不想用,因为NDK还要编译x86的。那个时候我一直用网易的MuMu模拟器——只需要编译Armv7的就行了。再后来就是网易的全部Mac App不知道抽了什么风,疯狂写log,直到写满硬盘为止,我就把MuMu给删了,同时也摆脱了这玩意动不动就启动不起来的烦恼。

现在的Android模拟器还是不错的,那就用一下吧。

在Mac上HAXM是不需要装的,即使装了也没用。

https://docs.microsoft.com/zh-cn/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?pivots=macos

先装了一个Oreo(Google Play),什么鬼,用了10G的磁盘空间,即使禁止热启动也没小多少,然后居然不能上网!网上一查,都是说要改DNS,还要root。

好吧,我知道Google的套件就是费空间,装个干净的吧,Q(Android 9.+),反正我也不用Google API,这回好些了,占用4G磁盘。

然后我又装了一个Android 6.0的镜像,占用5.2G磁盘,Android果然是垃圾堆——你会发现随着Android版本的增加,占用磁盘越来越少——或者说Google把原来的福利套件都移除了?

关键是,这个能直接上网!

比较一下就能发现,Android 6.0的镜像没有虚拟WiFi,直接用宿主机来上网

而从Android 7.0开始,虚拟了一个NAT网络,以下截图是Android 9.+的

所谓的改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一团麻,根本不知道是个什么情况,干脆先禁用一阵子。

Android模拟器不能上网的解决方法的更多相关文章

  1. android模拟器没有键盘的解决方法

    刚开始使用android模拟器的时候,发现自己创建的AVD启动后没有出现侧边的键盘,在网上搜索后,发现很多人都有这个问题,也有文章说直接使用PC上的键盘,因为有对应的快捷键.但是,没有键盘,始终不爽! ...

  2. Win8 传统桌面下无法上网的解决方法

    Win8 很酷,就连出现的问题也都酷得不行~ 之前遇到的一些问题与解决方法,避免重新安装 1. Word 2013下, 输入法突然秀逗, 经常按了一个键后, 死循环输入该字符直到死机 解决方法: 进入 ...

  3. VMware虚拟机的CentOS无法上网的解决方法

    前言:由于Linux下很多软件安装必须网络环境下进行,因此,对于如何在VMware下进行上网,我折腾了至少三天,今天上午,也即五一劳动节,终于搜到一遍技术文章,经过自己实践,VMware下Linux的 ...

  4. Android SDK下载失败的解决方法

    Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...

  5. win10只有edge浏览器能上网的解决方法

    问题描述:电脑就只有edge浏览器和自带的邮件可以上网,但是QQ Chrome,360浏览器都无法上网: 解决方法:打开命令提示符(管理员),执行netsh winsock reset,重启系统就好了 ...

  6. 用virtualbox虚拟机无法上网的解决方法

    用virtualbox虚拟机无法上网的解决方法   首先保证你的本机是可以正常上网的   启动虚拟机系统前,选择安装好的虚拟PC,点击"设置"按钮,然后切到"网络&quo ...

  7. android studio 更新 Gradle错误解决方法(Gradle sync failed)

    android studio 更新 Gradle错误解决方法   Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...

  8. Android webview 写入cookie的解决方法以及一些属性设置

    原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...

  9. 解决android模拟器无法上网问题

    1.  将 android的tool增加到,windows 环境变量 path中, D:\Android\android-sdk_r3-windows\android-sdk-windows\tool ...

随机推荐

  1. IP命令介绍

    ip指令可以显示或操作路由.网络设备.设置路由策略和通道 1.语法 ip [选项]  Object  COMMAND [help] Object对象可以是: link  网络设备.addr 设备的协议 ...

  2. 微信小程序引用外部js

    1.先建立一个common.js, 写我们的外部js 比如: common.js function getTime(){ //下面写我们的代码 .... } function getCity(){ / ...

  3. OfficeCommandbarViewer20171005.rar

    OfficeCommandbarViewer用于查看Office各组件工具栏和控件信息的一款软件. 采用了本地XML文件的方式,所以使用本工具不需要提前打开任何Office组件. 动态图: 下载地址: ...

  4. android版本更新框架、新闻客户端、音乐播放器、自定义View、Github客户端、指南针等源码

    Android精选源码 XUpdate 一个轻量级.高可用性的Android版本更新框架 Android一个可定制的圆形进度条 Android自定义View分享 打钩动画源码 android音乐文件播 ...

  5. Yii框架的学习指南(策码秀才篇)1-1 如何认识Yii framework

    Yii的框架和其他框架的区别在于:它是更加 快速,安全,专业的PHP框架 Yii是一个高性能的,适用于开发WEB2.0应用的PHP框架. Yii是一个基于组件.用于开发大型 Web 应用的 高性能 P ...

  6. Cow Routing(最短路spfa)

    题:https://www.luogu.org/problem/P3115 题意:给出起点A,终点B,N条路线,下面没俩行一个路线,第一行是俩个数,第一个为这条路线的花费,第二个为这条路线经过的点数n ...

  7. 学习C++之前要先学习C语言吗?

    C++ 读作“C加加”,是“C Plus Plus”的简称.顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone ...

  8. python与模块的导入方式

    今日所得 模块 import from...import... 循环导入 相对导入 绝对导入 软件开发目录规范 模块 模块:是一系列功能的集合体 模块的三种来源:1.内置模块(Python解释器自带的 ...

  9. 数据库引擎MyiSAM和InnoDB区别

    数据库操作原理归根到底还是对文件操作,只不过是数据库文件. MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三 ...

  10. 爬虫时伪装header信息

    在爬虫时,一般需要伪装Agent信息,放在header中 1.header不是必传参数,在需要的时候进行伪装 2.header = {"User-Agent": "Moz ...