尝试从 Eclipse 安装 .apk 时,无论是安装到 android 模拟器还是物理设备(通过 USB),我都会收到“无法在设备 '*' 上安装 *.apk:超时”错误。在模拟器或物理设备(三星 Galaxy S2,已植根)上找不到 .apk。
如果我避免使用 Eclipse,而只使用命令行,我也无法安装 .apk。
为什么要在这方面发新帖?
还有其他几个 stackoverflow 帖子引用了“无法安装...”错误。我创建了一个新帖子有几个原因:
- 其他大部分帖子都不详细。
- 突出的相关帖子,Android 错误:无法在设备上安装 *.apk *: timeout,对于原始海报,仅适用于物理设备连接。所以这是一个不同的情况,尽管有相似的症状。
- 我已经尝试过该帖子中的所有候选解决方案以及其他几个解决方案。这些在“我尝试过的候选解决方案”下列出。
这篇文章很长,因为我采取的步骤很长,正如错误所保证的那样。如果您不想阅读或至少扫描此帖子,请不要发表评论。
我的环境
主机操作系统:Windows XP SP3
JAVA:Java SDK 版本 1.6.0_32
WINDOWS 环境变量:
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_33;
PATH=...;%JAVA_HOME%\bin\;C:\android\android-sdk\tools;C:\android\android-sdk\platform-tools\;...;C:\Program Files\apache-ant-1.8.2\bin;...;
IDE:Eclipse(安装经典)Indigo。版本 3.7.2
安卓 SDK
- Android SDK 工具修订版:20。(主要使用修订版 19 进行测试)。
- Android SDK 平台工具:11。
- ADT 插件(“Android 开发工具包”,Eclipse 插件)版本:20.0.0.v201206010423-369331(也与之前的版本 18.0.0.v201203301501-306762)。
- 您的项目所针对的平台和在模拟器中运行的平台版本。尝试了每一个:
- 安卓 4.0.3 (API 15)
- 安卓 2.2 (API 8)
- 安卓 2.1 (API 7)
移动设备:运行 Android Ice Cream Sandwhich (ICS) 4.0.3 的三星 Galaxy S2
蚂蚁:1.8.2
我经历的产生错误的步骤。
使用 Eclipse 尝试将 .apk 安装到模拟器:
- 打开 Eclipse(它加载了我的工作区,其中包含一个 android 应用程序)。
- 使用之前配置的运行配置运行我的 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 安装到物理设备(根三星 Galaxy S2。4.0.3 并启用 USB 调试),在完成与上述类似的步骤后,我进入 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 创建项目 --target 3 --name MyAppCmd --path ./MyAppCmd --activity MyAppCmdActivity --package au.com.myorg.myappcmd
我得到一系列看起来很健康的输出“创建的项目目录......”,“添加的文件......”
- 在 Windows 中,我双击“AVD Manager.exe”。
- 我启动了我的 avd(针对 Android 2.2)
返回我的命令窗口
cd MyAppCmd
蚂蚁调试
在输出列表之后,我得到“BUILD SUCCESSFUL ...”(以前我必须编辑 C:\android\android-sdk\platform-tools\dx.bat 以将“set defaultXmx=-Xmx1024M”更改为“设置 defaultMx=-Xmx512M" 以使构建成功)。我观察到 bin/MyAppCmd-debug.apk 存在。
我尝试安装
adb install bin/MyAppCmd-debug.apk
输出:
* daemon not running. starting it now on port 5037 * * daemon started successfully * error: device offline
亚行设备
List of devices attached emulator-5554 device
adb install bin/MyAppCmd-debug.apk
命令窗口中没有进一步的输出。没有错误信息。只是一个闪烁的光标,没有错误或成功消息,也没有返回命令提示符“>”。
我关闭了命令行并打开了一个新的。
如果我尝试推送命令(以前在我的 Windows 系统上创建了 temp.txt),我会得到相同的结果(闪烁的光标等)......
adb push temp.txt /sdcard/temp.txt
我尝试过的候选解决方案
Eclipse 相关:
- 遵循Eclipse 中的步骤没有与模拟器交谈
- 增加了 ADB 连接超时。Eclipse > Window > Preferences > Android > DDMS > " ADB connection time out(ms):" = 10000(我也试过 60000)。
- 运行应用程序两次(并再次选择当前运行的模拟器或手机)。
- 清理了我的项目:Eclipse > Project > Clean ...
- 重新启动 Eclipse。
- 将 Eclipse 从 Indigo (2.7.x) 降级到 Helios (2.6.x)。
安卓相关:
- 以多种方式重置 adb: 从 Eclipse DDMS 角度(从设备窗口三角形)中的“重置 ADB”命令;带有“adb kill-server”和“adb start-server”的命令行;并使用 Windows 任务管理器杀死 adb.exe。
- 重新安装我的三星 OEM USB 驱动程序(通过使用 KIES > 工具 > 连接错误疑难解答)。
- 将我的 Android SDK 安装到路径中没有空格的目录中。即 C:\Android\android-sdk。这需要重新安装 SDK,以前位于 C:\Program files\Android\android-sdk
- 我的 Android 项目安装在路径中没有空格的目录中。
- 删除和重新创建 avd(从 Android AVD 管理器和使用 Windows 资源管理器)。
- 使用针对不同平台(Android 2.2 和 Android 4.0.3)的不同 AVD。
- 就在模拟器打开之后但超时之前:解锁手机 V 等到手机锁定(在模拟器中)超时。
已验证我的 AndroidManifest.xml 中有:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" />
环境相关(PC和电话):
- 重新启动了我的手机。
- 重新启动我的开发PC。
- 关闭我的软件和硬件防火墙。
- 开启 MS Security Essentials 实时保护。
- 禁用了我的主机列表。
- 重新安装Java。
- 引导进入 Windows 安全模式并运行 Eclipse。
- 通过查看Sysinternals TCPView中可用的内容,手动终止大多数其他应用程序 TCP/IP 进程(例如 GoogleDesk.exe、Apache Server PunkBuster 等) 。
- 断开以太网电缆与我的 PC 的连接。
其他信息
一些 adb 命令有效。
例如,以下内容使模拟器屏幕跳舞(如预期的那样)。
adb shell 猴子 -v 100
我可以列出设备,并正确检索它们的状态
亚行设备。
因此 adb 客户端和 adb 守护进程之间存在部分通信(通过 adb 服务器)。
我对 Android 开发比较陌生。但是,大约 6 个月前,我已经成功地将 .apks 安装到了模拟器和我的设备上(从我现在正在尝试工作的 WinXP PC 上)。从那以后我就忽略了Android。当我最近回到它时,我在构建我的 .apks 时遇到了一些问题,这是通过删除我的 debug.key 并允许 eclipse 生成一个新的来解决的。
在这 6 个月的时间里,我的开发机器发生了各种各样的变化。安装新的服务器和应用程序,更改防火墙设置等。所以很可能有一些我忽略的变化。
我还有一台 Win7 笔记本电脑,我已经成功地将 .apks 安装到模拟器和 USB 连接的物理设备上。也就是说,我在Win7机器上安装了一份Android SDK、Eclipse、JAVA等。所以我知道我对正确设置它的正确程序有一个大致的了解。
我可以通过 ES File Explorer 从我的手机(无线连接到我的开发机器)双击文件来手动安装 .apk。
最后的想法
似乎 adb 客户端、adb 服务器或 adb 守护程序在完全相互通信方面存在问题。
我有三个假设:
- 这是我的错。存在某种 TCP/IP 冲突,它破坏了 adb 客户端、adb 服务器或 adb 守护程序之间的某些连接。这是由于我的 PC 上的一些怪异设置(就像任何开发人员一样,我一直在更改系统上的各种设置)。但是,我尝试禁用安全性和其他可能冲突的 TCP/IP 进程(据我所知)。
- 我一直忽略一些简单的问题。
- 这是谷歌/安卓的错。也就是说,Android adb 中有一个 bug,需要更新 android SDK 平台工具。我认为这不太可能,因为我希望它现在已经浮出水面。
要发布的更新
2012-06-22 18:55 (UTC):
完全重新安装(再次)Java、Eclipse 和 Android SDK,在安装过程中有一些变化(例如,将 Java 安装到 root;Android SDK 安装到默认的“Program Files\”;并在安装过程中关闭所有安全软件)。
我注意到错误“停止 ADB 服务器失败(代码 -1)”。在 Android SDK Manager Log 期间和安装平台/工具的各个部分(通过 Manager)。
2012-06-30 06:15 (UTC):
重新调整了“我的环境”规范以反映最新的测试。