zoukankan      html  css  js  c++  java
  • Android虚拟机Genymotion使用相关问题及处理

    目前我已知的有三款Android模拟器,分别是bluestacks,Genymotion,andy,而 Andy 有特色的地方是提供了远程控制功能,可以在 Android手机/平板上安装 Andy 的 APP 直接无线操作电脑上的模拟器,个人用过前两种,感觉更喜欢Genymotion,更加逼真。当然只是个人意见,其中的差异还有待读者亲自体验一番。有机会要去尝试一下andy模拟器,对那个app远程控制挺感兴趣的。

    下面个人介绍一下我使用过程中遇见的一些问题:

    1.Genymotion网络问题

    先介绍一下VirtualBox 网络设置,转自http://reverland.bitbucket.org/VirtualBox_net.html,感谢作者。

    VirtualBox 有5种网络模式,下面将逐一讲解。

    NAT〈网络地址转换模式〉


    VirtualBox 中虚拟的主机(以下简称:虚拟主机)并不真实存在于网络中,宿主机和宿主机网络中的任何主机都不能直接访问虚拟主机,各虚拟主机也互不相通。虚拟主机能访 问宿主机,以及宿主机能访问的任何主机。虚拟主机访问网络是先通过 VirtualBox 转换后再发送出去的,数据接收也是先由 VirtualBox 接收后再转换转发到虚拟主机。

    如不能理解可以参考:http://zh.wikipedia.org/wiki/网络地址转换。

     

    虚拟主机网络参数默认从 VirtualBox 的虚拟 DHCP Ser 获取:

    IP地址子网掩码网 关DNS
    10.0.x.15 255.255.255.0 10.0.x.2 10.0.x.3
    VirtualBox 端口转发

    前面讲了宿主机和宿主机网络中的任何主机都不能直接访问虚拟主机,但是VirtualBox 提供了端口转发,使得我们可以设置特定的端口供实体网络访问。

    设置发送到宿主机的某些端口转发到虚拟主机,是不是很简单啊。宿主机IP地址干脆就127.0.0.1吧!

    Bridged Adapter〈桥接模式〉


    需要加载模块vboxnetflt

    虚拟主机通过 VirtualBox 桥接到宿主机的一个网卡中,就像真实存在于宿主机网络中的一台主机一样。虚拟主机能与宿主机和宿主机网络中的主机完美互通。被桥接的网卡会开启混杂模式。

     虚拟主机网络参数 : 手动配置成桥接的宿主机网卡的同一网段,或通过宿主机网络中的 DHCP Ser 获取。

    如果宿主机在一个受限制的网络虚拟主机是不能访问互联网的,如:宿主机使用ADSL、使用使用代理或VPN、宿主机网关做了MAC地址限制……

    Internal〈内部模式〉


    虚拟机与外界完全分开,虚拟机与宿主机网络不能互通,只有 同一名称(如:intnet)的内部网络模式的虚拟机之间才能互相访问 ,还有一个条件是在同一网段哦。

     虚拟主机网络参数 : 默认不分配IP,需要自已手动设置。

    Host-only Adapter〈宿主机模式〉


    VirtualBox 在宿主机中虚拟一个 host-only 网卡,然后把虚拟主机桥接到 host-only 网卡上,我们可以通过设置 host-only 网卡(共享、桥接)来实现网络连接。呵呵,这个动手性比较强,虽要你有一定的网络技术哦。

    关于网卡的桥接和共享,你可以查阅 Windows 相关文章,或 google 搜搜 “windows 网卡xx”。

     虚拟主机网络参数 :默认IP段为192.168.56.X/24

    “未指定”,呵呵,选择这个会发生什么?


    如果你选择“未指定”,你将不能和任何主机通信,只能够自已 ping 自已啦!

    VirtualBox 其它问题

    虽然VirtualBox 桥接模式非常好用,但是受限制的网络你怎么办呢?用NAT模式,不!这样宿主机访问虚拟主机太麻烦了。我的方法就是给虚拟主机添加两个网卡,一个网卡使用 NAT模式,另一个网卡使用Bridged Adapter模式,然后给虚拟主机设置静态路由,设置访问宿主机的数据从Bridged Adapter模式的网卡送出,而访问互联网的数据从NAT模式的网卡送去。是不是很简单啊!

    针对genymotion的网络问题,请看上述红色文字,则可简单设置genymotion的网络(也可解决学校锐捷的问题)

    给虚拟主机添加两个网卡,一个网卡使用 NAT模式,另一个网卡使用Bridged Adapter模式,然后给虚拟主机设置静态路由,设置访问宿主机的数据从Bridged Adapter模式的网卡送出,而访问互联网的数据从NAT模式的网卡送去。



    2.安装外界应用时或使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法

    • 很多ARM的程序都没法安装(比如微信),毕竟是用的vbox虚拟机,相当于在x86环境下运行的,限定ARM的程序自然是无法安装了,会提示"INSTALL_FAILED_CPU_ABI_INCOMPATIBLE"这个错误,无法向模拟器部署,如果直接安装APK则会提示与您的设备不兼容。

    解决办法:

    点击下载Genymotion-ARM-Translation.zip

    将你的虚拟器运行起来,将下载好的zip包用鼠标拖到虚拟机窗口中,出现确认对跨框点OK就行。然后重启你的虚拟机。

    不过在实际操作的过程中,发现在部分模拟器环境下,将zip文件拖进去以后会报错,提示"an error occurred while deploying a file"。经过实验,用DDMS也没法手动安装zip包里的东西(要复制到system下)。个人认为原因可能在于设备没有在root的状态下,但是Genymotion应该是已经root了的啊,最后解决方法是通过re管理器之类的文件管理工具,先获得root的读写权限,然后将文件手动复制过去替换就行了(记得要重启)。其实这方法也是xda的帖子([GUIDE] Genymotion | Installing ARM Translation and GApps)里面提到的。应该还有更简单的方法,其实就是将zip包中的system/lib下的文件都复制到设备就行了。

    这么操作以后,就可以安装各种ARM的程序了,微信也正常安装,经测试使用也没有什么问题。

    没试过Genymotion的朋友推荐试试这个模拟器,很多时候,比真机要更快捷方便,性能也很棒。

  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/ning1121/p/3944808.html
Copyright © 2011-2022 走看看