缓慢上传到正在运行的 Android 模拟器
Posted
技术标签:
【中文标题】缓慢上传到正在运行的 Android 模拟器【英文标题】:Slow uploads to running Android emulator 【发布时间】:2011-11-27 16:18:04 【问题描述】:我已搜索但未找到针对我的具体情况的任何查询或答案。我有一台运行 Windows 7 的具有大量内存的快速新机器。我正在使用最新的 Eclipse 和 android SDK。
当我运行一个应用程序时,模拟器从启动到运行我的应用程序大约需要 45 秒才能启动(对于模拟器来说非常快!)。
如果我随后更改应用程序并在仍在运行的模拟器上重新运行它,时间会增加到 70 多秒!与人们的所有其他抱怨相反,在我的情况下,重新启动模拟器比使用现有实例更快。我不喜欢那样。
以下是时间:
2011-09-29 13:07:13 - hello Uploading hello.apk onto device 'emulator-5554'
2011-09-29 13:07:18 - hello Installing hello.apk...
2011-09-29 13:07:37 - hello Success!
在更改应用程序以使其重新加载后重新运行:
2011-09-29 13:08:18 - hello Uploading hello.apk onto device 'emulator-5554'
2011-09-29 13:09:16 - hello Installing hello.apk...
2011-09-29 13:09:24 - hello Success!
如您所见,当模拟器重新启动时,上传到模拟器仅需 5 秒。运行模拟器需要将近一分钟!这是延长重新运行时间的原因。即使我在重新运行之前卸载模拟器上的应用程序,这也不会改变。
关于我可以尝试解决这个问题的任何想法?这似乎是某种通信问题,可能与 adb 相关。
【问题讨论】:
重新上传后应用是否还在模拟器中运行?是否占用了模拟器的 CPU 或 IO 资源? 没有。我退出应用程序。我什至可以从模拟器中完全卸载该应用程序,但同样的事情也会发生。我也尝试过增加模拟器中的内存,但这没有任何区别。 DDMS 在模拟器上没有显示任何不良活动。 您是否尝试重新启动 adb? (adb kill-server
后跟 adb start-server
在命令行上)
我现在已经尝试过了 - 不幸的是它没有任何区别。我目前不确定是谁的“错”;事物或模拟器的 Eclipse 方面。我想我将不得不放弃并只使用硬件设备,因为它从来没有任何问题。虽然这很烦人 - 显然在后续加载时会发生某种通信超时。如果我加载不同的应用程序,然后加载测试应用程序,也会出现较长的上传时间。
我有同样的问题,上传到 android 3.0 模拟器的速度很慢。有趣的是,有时我很幸运能在 15 秒内将应用程序上传到运行模拟器。但大多数时候,它需要超过 1 分钟的时间。奇怪的行为...
【参考方案1】:
我有同样的问题,我正在开发一个 4.6MB 的 android 应用程序,我可能需要 50-60 秒才能将它上传到模拟器上并运行它。我认为这不是问题与通讯。 JVM 很慢,这就是为什么您需要时间来上传您的 apk 并运行它。我认为您对此无能为力,除非您开始在设备上测试您的应用程序。
【讨论】:
您是否发现在初始模拟器启动时获得更快的响应?我忘了添加,我的应用程序属于“hello world”类型 - 所以不是很大! 我没试过,但我认为它更快,因为模拟器初始化和上传你的应用程序是同时完成的。这就是为什么它会快一点。 我不认为它是这样工作的。模拟器必须先完成初始化,然后才能上传和安装 apk - 就像您在启动真实设备一样;在 Android 运行之前什么都不会发生。 我有同样的问题,上传到 android 3.0 模拟器的速度很慢。有趣的是,有时我很幸运能在 15 秒内将应用程序上传到运行模拟器。但大多数时候,它需要超过 1 分钟的时间。奇怪的行为... Android 模拟器还是有问题。特别是如果您使用新版本 4.0 创建。我的关闭太频繁而且仍然很慢。我的应用程序是 1.3MB,我正在等待 30 秒来上传它。这就是为什么我只在我想确保我的数据库正常并查看我插入其中的内容时才使用它的原因。【参考方案2】:我遇到了同样的问题,但我确信这与操作系统有关,因为我使用 MacBook Pro 和戴尔笔记本电脑上传了相同的应用程序,考虑到硬件规格,戴尔笔记本电脑功能更强大,但是Mac 上的上传时间明显缩短。
然而,在这台装有 Windows 的戴尔笔记本电脑上,上传到实际的 Android 设备要快得多。
我认为可能与“Google USB驱动程序包”有关,我之前没有安装过,但安装后并没有真正改变。
【讨论】:
【参考方案3】:只是大声思考:
我不知道这一点,但我想知道这是否是因为 Android 应用程序都有自己的 Dalvik VM 实例并作为单独的用户和进程运行。当您“认为”您已关闭应用程序时,Android 可能会保持进程(肯定是 VM)处于活动状态,以防您重新启动应用程序。这类似于 windows 中的预取行为。
当您重新运行应用程序时,在修改源代码后,Android 可能不得不销毁缓存的实例。在同一个模拟器实例中重新部署的情况下,您注意到的额外延迟可能是由于正常关闭 VM 和应用程序所产生的成本。
【讨论】:
【参考方案4】:尝试将您的模拟器 RAM 设置为 1024。
【讨论】:
【参考方案5】:愚蠢的问题 - 您是否在多个 AVD 上尝试过?您的一个 AVD 可能在某种程度上搞砸了。
【讨论】:
【参考方案6】:我的新发现是一个小“hack”,如何让您的上传速度更快。我意识到上传速度更快的情况是我的交互造成的。因此,当我在没有主动使用模拟器的情况下上传新应用程序时,速度很慢。但是当我使用它(测试我的应用程序、退出、打开应用程序列表等)时,上传速度要快得多——在我的情况下大约是15 秒而不是将近 2 分钟。
所以我认为,问题出在模拟器的性能设置中。当我什么都不做时,它认为不需要很大的性能,模拟器切换到某种经济状态,所以我的上传也很慢。
【讨论】:
【参考方案7】:详细说明 teepee 在之前的帖子中所说的内容,我发现如果我在上传阶段使用已经运行的 AVD,它会更快地完成(5 秒对 60 秒)并且我已安装并运行在很短的时间内。这是 4.0.3 AVD。其他的还没试过。
【讨论】:
【参考方案8】:在上传您的应用程序时使用模拟器。我完全同意 teepee。它将我的等待时间从 4 分钟缩短到 30 秒。
【讨论】:
那是 cuh-rayzee。下次试试:-D【参考方案9】:正如其他人所发布的那样,上传时只需在模拟器中单击即可大大提高上传速度。我遇到了同样的问题并用谷歌搜索了答案,尝试这个技巧对我有帮助。我正在运行 2.3.3 AVD。
【讨论】:
有没有自动化的加速方法?【参考方案10】:你能得到的最快的模拟器是带有 Android 的 VMWare 机器。
在开发我的游戏 Elastic World 时,我遇到了同样的问题。在等待模拟器启动几分钟后,游戏以最高 20 FPS 的速度运行。即使在低端安卓设备上,我也可以轻松获得 60 FPS。上传速度很慢。
因此,我按照以下站点的说明移至 VMWare Android 机器:http://www.android-x86.org/documents/installhowto/
相同的游戏循环现在以 250 FPS 运行。 (它无法以这种速度播放,我将游戏限制为最大 60 FPS,但覆盖此限制它提供 250 FPS)
当 Eclipse 结束构建过程时,我只需要等待 1 到 5 秒,游戏就会出现在虚拟机上。我正在运行旧的 Core2Duo
【讨论】:
【参考方案11】:在模拟器上上传apk时尽可能多地与模拟器进行交互,如果在上传时按模拟器的随机按钮,它将提前上传,之前需要5-6分钟才能上传,但现在只需15-20分钟秒。
【讨论】:
【参考方案12】:我也见过这个。假设您一直在使用相同的 AVD,这里有一些帮助。 擦除 AVD 上的用户数据。完成此操作后,它会再次更快地加载应用程序,几秒钟。
【讨论】:
【参考方案13】:这不是 AVD 的问题,它解决了问题,我不知道是否有办法在我们所谓的参数丛林中改变它。
简而言之,您可以在控制台命令中自行启动模拟器 使用以下内容:
emulator.exe -avd MyAVDName -netspeed full -netdelay none
很好的参数,为什么 Eclipse 不使用它? 一些 Eclipse 编码器应该将其设为默认值。 另一种解决方案是切换到 IntelliJ IDEA。它将光荣地用一个新的、更好的 IDE 取代你旧的笨重的 IDE。
【讨论】:
【参考方案14】:更好的解决方案:
转到运行 -> 运行配置... -> 目标选项卡 -> 附加仿真器命令行选项。在那里添加:
-netspeed full -netdelay none
现在关闭模拟器并再次运行。
完成此操作后,上传时间从 2 分钟变为 8 秒。
编辑: 我还发现退出 Skype 可以让我的模拟器上传速度更快。
【讨论】:
In case you have a hard time finding the netry field(我有!),寻找滚动条 顺便说一句:我正在运行带有 api 18 的 Android,具有 8000 Mb 内部 RAM 和 2000 Mb sdcard【参考方案15】:替代方法:
在你的电脑上设置一个FTP服务器来托管apk文件,现在你可以通过android模拟器网络浏览器下载apk文件并使用adb直接安装应用程序。
或
在安卓模拟器上安装一个samba客户端,在你的电脑上共享apk文件,然后将apk文件复制到模拟器上,然后使用adb直接安装应用程序。
以上所有方式都比 adb install 快。
【讨论】:
在 Mac 或 Linux 上使用 python 非常简单 -> 转到 app/build/outputs/apk 文件夹,然后输入 sudo python -m SimpleHTTPServer【参考方案16】:在终端/控制台中,我使用adb -e shell
进入AVD,然后转到上传apk 的tmp 目录cd /data/local/tmp
,然后执行ls -l
以查看当前文件大小。我发现如果我坐在那里继续按向上箭头然后输入以快速重复ls -l
,上传速度会大大加快。随着文件大小的增加,您可以查看进度。
这可能类似于其他人提到的在 AVD 中单击的效果。
我在 Mac 上。不确定在 Windows 或 Linux 上是否相同。
【讨论】:
【参考方案17】:这可能适用于 Windows,
启动任务管理器-->进程选项卡-->寻找emulator.exe,
右击并设置优先级为高
工作完成后不要忘记将其设置为正常。
还可以在不需要时关闭需要大量内存的不需要的应用程序,例如 chrome 和 firefox。
【讨论】:
【参考方案18】:我知道这是一个老话题,但我认为我确实有解决这个问题的办法。
首先,您需要在没有 netspeed 参数的情况下启动模拟器,如下所示:
emulator -avd <name>
一旦它开始使用 telnet 登录到模拟器。您可以从模拟器窗口顶部获取端口,也可以通过运行 adb devices 并查看模拟器的串行端口,格式为 emulator-port(在大多数情况下通常为 5554)
telnet localhost 5554
使用telnet登录后,需要发出以下命令强制模拟器使用非常高的网速
network speed 500000
然后您可以使用以下命令在 telnet 中检查此设置
network status
哪个应该返回
Current network status:
download speed: 500000000 bits/s (61035.2 KB/s)
upload speed: 500000000 bits/s (61035.2 KB/s)
如果您现在尝试安装 APK,您会发现性能显着提高。就我而言,它从 260 秒变为 18 秒。
【讨论】:
以上是关于缓慢上传到正在运行的 Android 模拟器的主要内容,如果未能解决你的问题,请参考以下文章