当尝试从Eclipse安装.apk时,无论是安装到android模拟器还是物理设备(通过USB),我都会收到"在设备'*'上安装*.apk失败:超时"错误。在模拟器或物理设备上都找不到.apk(三星Galaxy S2,根)。
如果我避免eclipse,只使用命令行,我也无法安装.apk.
为什么要发一篇关于这个的新帖子
还有其他一些stackoverflow帖子引用了"安装失败…"错误。我创建了一个新的职位有几个原因:
- 其他大多数帖子都没有详细说明
- 突出的相关帖子,Android错误:无法在设备上安装*.apk*:超时,对于原始海报,仅适用于物理设备连接。所以这是一个不同的情况,尽管有相似的症状
- 我已经尝试了该职位上的所有候选解决方案,以及其他几个解决方案。下面列出了"我尝试过的候选解决方案">
这篇文章很长,因为我所采取的步骤很长,这是错误所保证的。如果你不想阅读,或者至少不想浏览,请不要评论这篇文章。
我的环境
主机操作系统:Windows XP SP3
JAVA:JAVA SDK版本1.6.0_32
WINDOWS环境变量:
JAVA_HOME=C:Program FilesJavajdk1.6.0_33;
PATH=...;%JAVA_HOME%bin;C:androidandroid-sdktools;C:androidandroid-sdkplatform-tools;...;C:Program Filesapache-ant-1.8.2bin;...;
IDE:Eclipse(安装的经典)Indigo。3.7.2版
ANDROID SDK
- Android SDK工具修订版:20。(主要通过修订版19进行测试)
- Android SDK平台工具:11
- ADT插件("Android开发工具包",Eclipse插件)版本:20.0.0.v201206010423-369331(也与之前的版本18.0.0.v201203301501-306762一起使用)
- 您的项目所针对的平台&模拟器中运行的平台的版本。试过每一次:
- Android 4.0.3(API 15)
- 安卓2.2(API 8)
- Andorid 2.1(API 7)
MOBILE:三星Galaxy S2运行安卓冰淇淋沙(ICS)4.0.3
蚂蚁:1.8.2
我所经历的产生错误的步骤
使用Eclipse尝试将.apk安装到模拟器:
- 打开eclipse(它加载了我的工作空间,其中有一个android应用程序)
- 使用以前配置的Run配置运行我的android应用程序
- "Android设备选择器"启动(我已将运行配置设置为手动启动)
- 在Android设备选择器中,我选择我的avd(针对Android 2.2),然后单击确定
- 模拟器以"5554:jlbavd2_2"打开。我的AVD名称是"jlbavd2_2">
- 我打开模拟器。在Eclipse中,我打开了DDMS视图。在"设备"窗格中,我点击白色三角形并选择"重置adb">
在Eclipse控制台的Android视图中,我得到
[2012-06-19 19:20:52 - MyApp] Starting full Post Compiler.
[2012-06-19 19:20:52 - MyApp] ------------------------------
[2012-06-19 19:20:52 - MyApp] Android Launch!
[2012-06-19 19:20:52 - MyApp] adb is running normally.
[2012-06-19 19:20:52 - MyApp] Performing au.com.myorg.myapp.MyAppActivity activity launch
[2012-06-19 19:20:52 - MyApp] Refreshing resource folders.
[2012-06-19 19:20:52 - MyApp] Starting incremental Pre Compiler: Checking resource changes.
[2012-06-19 19:20:52 - MyApp] Nothing to pre compile!
[2012-06-19 19:20:53 - MyApp] Starting incremental Package build: Checking resource changes.
[2012-06-19 19:20:53 - MyApp] Skipping over Post Compiler.
[2012-06-19 19:20:59 - MyApp] Launching a new emulator with Virtual Device 'jlbavd'
[2012-06-19 19:22:29 - MyApp] New emulator found: emulator-5554
[2012-06-19 19:22:29 - MyApp] Waiting for HOME ('android.process.acore') to be launched...
[2012-06-19 19:22:44 - MyApp] HOME is up on device 'emulator-5554'
[2012-06-19 19:22:44 - MyApp] Uploading MyApp.apk onto device 'emulator-5554'
[2012-06-19 19:22:49 - MyApp] Failed to install MyApp.apk on device 'emulator-5554': timeout
[2012-06-19 19:22:49 - MyApp] Launch canceled!
在Eclipse控制台中,DDMS输出,我得到:
...
[2012-06-19 19:22:44 - ddm-hello] handling HELO
[2012-06-19 19:22:44 - ddm-hello] HELO: v=1, pid=150, vm='Dalvik v1.2.0', app='android.process.acore'
[2012-06-19 19:22:44 - MyApp.apk] Uploading MyApp.apk onto device 'emulator-5554'
[2012-06-19 19:22:44 - Device] Uploading file onto device 'emulator-5554'
[2012-06-19 19:22:49 - ddms] write: timeout
[2012-06-19 19:22:49 - Device] Error during Sync: timeout.
[2012-06-19 19:22:49 - ddms] Removing req 0x4000002d from set
有时(也许我做的步骤略有不同)我得到:
[2012-06-16 14:20:02 - MyFirstApp02] Starting full Post Compiler.
[2012-06-16 14:20:02 - MyFirstApp02] ------------------------------
[2012-06-16 14:20:02 - MyFirstApp02] Android Launch!
[2012-06-16 14:20:02 - MyFirstApp02] adb is running normally.
[2012-06-16 14:20:02 - MyFirstApp02] Performing au.com.myorg.MyFirstApp02Activity activity launch
[2012-06-16 14:20:08 - MyFirstApp02] Launching a new emulator with Virtual Device 'jlbavd2_2'
[2012-06-16 14:20:17 - Emulator] bind: Unknown error
[2012-06-16 14:20:17 - MyFirstApp02] New emulator found: emulator-5556
[2012-06-16 14:20:17 - MyFirstApp02] Waiting for HOME ('android.process.acore') to be launched...
[2012-06-16 14:20:38 - MyFirstApp02] HOME is up on device 'emulator-5556'
[2012-06-16 14:20:38 - MyFirstApp02] Uploading MyFirstApp02.apk onto device 'emulator-5556'
[2012-06-16 14:20:50 - MyFirstApp02] Failed to install MyFirstApp02.apk on device 'emulator-5556': timeout
[2012-06-16 14:20:50 - MyFirstApp02] Launch canceled!
注意"绑定:未知错误"。有时会发生这种错误,有时不会。
如果我把以太网电缆拔到硬件路由器上,我会得到以下信息:
[2012-06-19 23:27:29 - MyApp] Android Launch!
[2012-06-19 23:27:29 - MyApp] adb is running normally.
[2012-06-19 23:27:29 - MyApp] Performing au.com.softmake.myapp.MyAppActivity activity launch
[2012-06-19 23:27:29 - MyApp] Refreshing resource folders.
[2012-06-19 23:27:29 - MyApp] Starting incremental Pre Compiler: Checking resource changes.
[2012-06-19 23:27:29 - MyApp] Nothing to pre compile!
[2012-06-19 23:27:33 - MyApp] Launching a new emulator with Virtual Device 'jlbavd'
[2012-06-19 23:27:40 - Emulator] Warning: No DNS servers found
[2012-06-19 23:27:44 - Emulator] emulator: emulator window was out of view and was recentered
[2012-06-19 23:27:44 - Emulator]
[2012-06-19 23:28:29 - MyApp] New emulator found: emulator-5554
[2012-06-19 23:28:29 - MyApp] Waiting for HOME ('android.process.acore') to be launched...
[2012-06-19 23:28:36 - MyApp] HOME is up on device 'emulator-5554'
[2012-06-19 23:28:36 - MyApp] Uploading MyApp.apk onto device 'emulator-5554'
[2012-06-19 23:28:42 - MyApp] Failed to install MyApp.apk on device 'emulator-5554': timeout
[2012-06-19 23:28:42 - MyApp] Launch canceled!
注意"警告:找不到DNS服务器">
使用Eclipse尝试将.apk安装到物理设备(根为Samsung Galaxy S2。启用USB调试的4.0.3),在经历了上面类似的步骤后,我进入了Eclipse控制台,Android输出:
[2012-06-15 22:40:34 - MyFirstApp] Starting full Post Compiler.
[2012-06-15 22:40:34 - MyFirstApp] ------------------------------
[2012-06-15 22:40:34 - MyFirstApp] Android Launch!
[2012-06-15 22:40:34 - MyFirstApp] adb is running normally.
[2012-06-15 22:40:34 - MyFirstApp] Performing
au.com.myorg.myfirstapp.MyFirstAppActivity activity launch
[2012-06-15 22:40:39 - MyFirstApp] Uploading MyFirstApp.apk onto device '0019adf659f24e'
[2012-06-15 22:40:51 - MyFirstApp] Failed to install MyFirstApp.apk on device '0019adf659f24e': timeout
[2012-06-15 22:40:51 - MyFirstApp] Launch canceled!
与尝试安装到模拟器时发生的错误类型相同。
当只使用命令行,从而避免Eclipse时,我会经历以下步骤:
在我的工作目录中打开一个windows命令提示符(我使用的是C:\Data\Sda\Code\Mobile\Android\Examples>")
android列表目标。
我获得我的目标id(我选择Android 2.2)。
android创建项目-目标3-名称MyAppCmd-路径/MyAppCmd--活动MyAppCmdActivity--包au.com.myor.MyAppCmd
我得到了一系列看起来健康的输出"创建项目目录…","添加文件…">
- 在窗口中,我双击"AVD Manager.exe">
- 我启动了我的avd(目标是Android 2.2)
回到我的命令窗口
cd MyAppCmd
ant调试
在一个输出列表之后,我得到了"BUILD SUCCESSFUL…"(之前我不得不编辑C:\android\android-sdk\platform-tools\dx.bat,将"set defaultXmx=-Xmx1024M"更改为"set defaultMx=-Xmx512M",以使构建成功)。我观察到bin/MyAppCmd-debug.apk存在。
我尝试安装
adb安装bin/MyAppCmd-debug.apk
输出:
* daemon not running. starting it now on port 5037 * * daemon started successfully * error: device offline
adb设备
List of devices attached emulator-5554 device
adb安装bin/MyAppCmd-debug.apk
命令窗口中没有进一步的输出。没有错误消息。只有一个闪烁的光标,没有错误或成功消息,也没有返回命令提示符">"。
我关闭了命令行,打开了一个新的命令行。
如果我尝试推送命令(temp.txt以前在我的windows系统上创建过),我会得到同样的结果(光标闪烁等)。。。
adb推送temp.txt/sdcard/temp.txt
我尝试过的候选解决方案
Eclipse相关:
- 遵循Eclipse中的步骤不与模拟器对话
- 增加了ADB连接超时时间。Eclipse>Window>Preferences>Android>DDMS>"ADB连接超时(ms):"=10000(我也试过60000)
- 运行应用程序两次(然后再次选择当前正在运行的模拟器或手机)
- 清理了我的项目:Eclipse>项目>清理
- 重启Eclipse
- 从Indigo(2.7.x)到Helios(2.6.x)的降级Eclipse
安卓相关:
- 通过多种方式重置adb:从Eclipse DDMS角度(从设备窗口三角形)执行"重置adb"命令;命令行,带有"adb终止服务器"one_answers"adb启动服务器";并使用Windows任务管理器杀死adb.exe
- 重新安装我的三星OEM USB驱动程序(通过使用KIES>工具>疑难解答连接错误)
- 将我的Android SDK安装到路径中没有空格的目录中。即C:\Android\Android-sdk。这需要重新安装以前位于C:\Program files\Android\Android-SDK的SDK
- 我的Android项目安装在一个路径中没有空格的目录中
- 删除和重新创建avd(从Android avd管理器和使用Windows资源管理器)
- 使用针对不同平台的不同AVD(Android 2.2和Android 4.0.3)
- 在Emulator打开后但超时之前:解锁手机V,等待手机超时(在模拟器中)
验证我在我的AndroidManifest.xml中有:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />
环境相关(电脑和手机):
- 重新启动我的手机
- 重新启动了我的开发PC
- 关闭我的软件和硬件防火墙
- 启用MS Security Essentials实时保护
- 禁用了我的主机列表
- 重新安装Java
- 启动到Windows安全模式并运行Eclipse
- 通过查看Sysinternals TCPView中的可用内容,手动杀死大多数其他应用程序TCP/IP进程(例如GoogleDesk.exe、Apache Server PunkBuster等)
- 已断开以太网电缆与电脑的连接
其他信息
一些adb命令有效。
例如,下面的内容使模拟器屏幕翩翩起舞(正如预期的那样)。
adb shell monkey-v 100
我可以列出设备,并使用正确检索它们的状态
adb设备。
因此,adb客户端和adb守护进程之间存在部分通信(通过adb服务器)。
我对安卓系统的开发还比较陌生。然而,大约6个月前,我已经成功地将.apks安装到模拟器和我的设备上(我现在正试图从WinXP PC上开始工作)。从那时起,我就忽略了安卓系统。当我最近回到它时,我在构建.apk时遇到了一些问题,通过删除我的debug.key并允许eclipse生成一个新的,这个问题得到了解决。
在这中间的6个月里,我的开发机器发生了各种各样的变化。安装新的服务器和应用程序,更改防火墙设置等等。所以我很可能忽略了一些变化。
我还有一台Win7笔记本电脑,我已经成功地安装了.apk到模拟器和USB连接的物理设备。也就是说,我在Win7机器上安装了一份Android SDK、Eclipse、JAVA等的副本。所以我知道我对正确设置程序有一个大致的把握。
我可以从我的手机(无线连接到我的开发机器)通过ES文件浏览器双击文件来手动安装.apk。
最后的想法
adb客户端、adb服务器或adb守护进程在完全相互通信时似乎存在一些问题。
我有三个假设:
- 这是我的错。存在某种TCP/IP冲突,会中断adb客户端、adb服务器或adb守护进程之间的一些连接。这是由于我电脑上的一些奇怪设置造成的(就像任何开发者一样,我一直在更改系统上的各种设置)。然而,我已经尝试过禁用安全性和其他潜在冲突的TCP/IP进程(据我所知)
- 一些我一直忽略的简单问题
- 这是谷歌/安卓的错。也就是说,安卓adb中存在一个错误,需要更新安卓SDK平台工具。我认为这种可能性较小,因为我预计它现在已经浮出水面
要发布的更新
2012-06-22 18:55(UTC):
(再次)完成Java、Eclipse和Android SDK的重新安装,并在安装过程中进行一些更改(例如,将Java安装到root;将Android SDK安装到默认的"Program Files";并在安装期间关闭所有安全软件)。
我注意到在平台/工具的各个部分的安装过程中(通过管理器),Android SDK管理器日志中出现了一个错误"停止ADB服务器失败(代码-1)。"。
2012-06-30 06:15(UTC):
重新调整了"我的环境"规格以反映最新测试。
如果超时,则可能是ADB与eclipse的连接将需要更多的超时限制。所以试试这个:
Prefrences>android>DDMS and you will see ADB connection timeout extend it to 20000
当这种情况发生在我们的物理设备上时,我们通常会尝试通过拔下插头、在设备上切换"android调试模式"并重新连接来解决。
确保您使用的是ADMIN帐户。这个问题也让我很沮丧,但当我切换到管理员帐户(在Windows Vista上)时,adb似乎正确地在设备上安装了apk。
我遇到了同样的问题;通过将*.apk复制到手机内存并直接安装在设备上(通过Myfiles并选择*.apk),它工作正常。我怀疑USB连接有问题(错误太多,Eclipse太慢,因为其他进程使用USB等)。
我的简单方法是重新启动模拟器(而不是eclipse)。它只是在我不需要发送任何adb命令的情况下工作。不过,物理设备很少发生这种情况。
几个月后,我通过升级到一个全新的环境解决了这个问题。具体来说,是一台新安装了Windows 8的新机器。我也避免安装Comodo套件(我不知道这是造成问题的原因)。
因此,虽然这不是问题的直接解决方案(目前尚不清楚是什么原因造成的),但也许它可以作为另一个例子,解决方法或横向解决问题有时是一个很好的最后选择。
尝试更改ADB连接超时。我认为它默认为5000毫秒,我把我的改为10000毫秒以解决这个问题。
如果你在Eclipse中,你可以通过来完成
窗口->首选项->Android->DDMS->ADB连接超时(ms)
试试这些。。。
- 关闭eclipse
- 转到cmd并键入:(我希望你已经在你的路径中设置了android工具文件夹的路径)
adb kill-server
adb start-server
输出将是:
daemon not running. starting it now on port 5037
daemon started successfully
启动Eclipse。
启动您的模拟器,如果您在物理设备上,请检查您的电缆是否松动,并正确连接
我的行为与您的问题中提到的相同,并尝试了您列出的所有解决方案。试试这个:更改USB端口。对我来说,我总共有4个USB端口(两个在我的桌面前面,另外两个在后面)。无论我做什么,前面的两个都会给我[暂停安装]。我试过的后面的第一个成功了。我想知道这可能是一些与USB端口版本或主板嵌入式USB有关的问题
只需拔下并插入手机即可(物理)。这种情况确实发生在我身上(太多次),当手机连接太久而什么都没做的时候。
当这种情况发生时,这就是我在Win7 64位系统上所做的:
- 关闭Eclipse
- 从任务管理器中删除adb.exe和emulator-arm.exe的所有副本
- 打开Eclipse
- 更改为DDMS视图并确保您可以看到设备
- 打开窗口/ADV管理器
- 选择所需的模拟器,然后按"开始">
- 观察DDMS中的"设备"面板,查看模拟器是否显示。如果在"开始"窗口进度条完成之前没有显示,则模拟器这次不会加载,因此关闭模拟器
- 然后从6开始重复
对我来说,模拟器从未第一次启动,但10次中有9次会在第二次尝试时成功启动。
希望他们能解决这个问题!标记
如果您不在管理员帐户中,请确保关闭家长控制。这对我很有效。
你可以试试这个:
- 打开">Android虚拟设备管理器">
- 从列出的设备中选择并运行它
- 右键您的安卓应用程序->运行方式->安卓应用程序
它对我有效。我在eclipse的模拟器上尝试过这个。运行应用程序需要一段时间。对我来说,花了33秒。等待控制台中的消息显示"成功!">