you must restart adb and eclipse的相关解决办法

本文分享了一种解决ADB端口5037被占用的问题,通过排查发现是豌豆荚软件导致的端口占用,并提供了详细的解决步骤。

今天一不小心遇到个问题,问题截图如下


我试了N种google来的方法,都失效,现在把我的解决方法告诉大家,希望能帮到大家。

首先,我先罗列下我搜到的方法,大家也可以尝试。

1,关闭eclipse并在进程中杀掉adb.exe,然后重启。

2,如有真机连接,拔掉真机,重复1的步骤,

3,关掉eclipse,然后在命令行运行如下命令

adb kill-server

adb start-server

然后重启eclipse

还有别的类似的办法就不再这里多说了,

我的问题最根本其实是端口5037被占用,在命令行中运行netstat -a,会出现一堆东西,找找是否有关于5073端口的东西,经我验证我的是有东西的,所以我的端口被用,但是我已经将adb.exe杀掉,所以是别的东西占用了这个端口,回忆了下,最近有什么操作和之前不同,就是用豌豆荚连了下真机,那有可能就是豌豆荚占用的,我先关闭eclipse,我在进程中杀掉了豌豆荚,然后再重启eclipse,之后命令行执行adb reboot;出现下列情况


可以看出端口回来了,daemon 打开成功,而之前报错时在控制台中daemon是打开失败,现在问题基本解决了,这里出现了一个error,不要担心,只是没检测到设备,可能是没有运行模拟器或者没连真机导致的,现在就能运行项目检测了,我想问题应该能解决了。根据我的情况,第二天重新开机运行项目后又出现同样的问题,进程中又多了豌豆荚,但是我并没有打开豌豆荚,所以建议不要将豌豆荚设为开机启动。问题就能解决了。

如果有和我一样用豌豆荚安装apk的开发者遇到这样的问题可以尝试这种方法,最后我还是建议大家安装apk时还是最好用命令行push或者instal,其实我主张不用此类第三方软件,有时最原始的方法是最方便的。


<think>首先,用户的问题是基于提供的引用材料,询问“adb shell am restart”和“adb reboot”这两个命令的差别。我需要参考给定的引用内容来回答。 回顾引用内容: - 引用[1]:讨论了“adb reboot”与“adb shell svc power reboot”的区别。 - adb reboot:更快,跳过Android Framework层;在系统服务异常时仍然可用;不会触发正常关闭流程。 - adb shell svc power reboot:更安全,会通知服务关闭;记录日志;执行关机广播;在系统服务异常时可能无法使用。 - 引用[2]:列出adb命令,但没有直接提到“adb shell am restart”。 - 引用[3]:展示了一个脚本使用“adb shell reboot”来自动重启设备。 用户的问题是关于“adb shell am restart”和“adb reboot”。引用[1]提到了“adb reboot”和“adb shell svc power reboot”,但用户问的是“adb shell am restart”。注意,“am”可能指的是Activity Manager。 从引用[2]中,有“adb shell am start”,但没有“adb shell am restart”。用户可能打错了,或者是常见的命令。标准adb命令中,“adb shell am restart”可能不是标准命令;通常,“am”用于管理activities,如“am start”或“am force-stop”。 在Android开发中: - “adb reboot”是adb命令直接重启设备。 - “adb shell am”是用于Activity Manager的命令。常见的命令是“adb shell am start”启动activity,或“adb shell am force-stop”停止进程。 “adb shell am restart”可能不是标准命令;标准重启命令可能是“adb shell am broadcast”发送广播或类似。 用户提到了“adb shell am restart”,但在引用中没有直接出现。引用[1]提到了“adb shell svc power reboot”,这与“adb reboot”相关。 可能的误解: - “adb shell am restart” – 可能用户指的是“adb shell am restart”,但这可能不是标准命令。标准命令可能是“adb shell svc power reboot”或直接“adb reboot”。 - 在Android中,“am”命令通常用于activity管理。“restart”可能指的是重启应用程序或服务。 从引用[1],核心区别在于: - adb reboot:底层重启,绕过Android框架。 - adb shell svc power reboot:通过系统服务重启,更安全。 用户问的是“adb shell am restart” vs “adb reboot”。我必须基于引用推断。 引用[2]中,有“adb shell am start”,但没有“restart”。可能用户意指“adb shell svc power reboot”,因为引用[1]讨论了它。 在回答中,我应该: 1. 澄清命令的正确性。 2. 基于引用解释差异。 假设“adb shell am restart”可能是个误解,标准命令可能是“adb shell svc power reboot”。 用户的查询: “请问adb shell am restartadb reboot命令的差别” 从引用[1],adb reboot vs adb shell svc power reboot 有区别: - adb reboot:直接重启,跳过框架。 - adb shell svc power reboot:通过系统服务重启。 “adb shell am restart” – 可能用户指的是“adb shell am”命令中的重启功能。但标准adb命令中,“am restart”不是常见命令;可能是“adb shell am force-stop”或“adb shell input keyevent KEYCODE_POWER”等。 在回答中,我应该: - 指出“adb shell am restart”可能不是标准命令;标准重启命令是“adb reboot”或“adb shell svc power reboot”。 - 然后解释adb reboot和adb shell svc power reboot的差异,基于引用[1]。 引用材料中没有提到“am restart”,所以我认为用户可能混淆了命令。 可能的解释: - adb reboot:直接重启设备。 - adb shell am restart:可能意指重启一个应用程序,而不是整个设备。 “am”用于管理activities,如重启一个app。 在Android中,“adb shell am restart”可能尝试重启一个包。例如,“adb shell am force-stop com.example.app”然后启动它可以认为是重启app。 但用户的问题似乎是关于重启整个设备的,因为对比的是“adb reboot”。 从上下文,用户可能想知道设备重启命令的差异。 在回答中: - 澄清“adb shell am restart”可能不是用于设备重启;用于设备重启的命令是adb reboot或adb shell svc power reboot。 - 然后详细解释它们的差别。 基于引用[1]: - adb reboot:快速但不安全;跳过框架关闭流程。 - adb shell svc power reboot:更安全;执行正常关闭流程。 用户提到了“adb shell am restart”,所以我需要处理这个。 或许“am restart”是个错误;标准命令是“adb shell svc power reboot”。 在回答中,我可以这样说: - “adb shell am restart”命令可能不是标准的设备重启命令;标准命令是“adb reboot”或“adb shell svc power reboot”。 - 然后解释adb reboot和adb shell svc power reboot的区别。 引用[1]直接提供了差异: - adb reboot:更快,跳过Android Framework层;在系统服务异常时仍然可用;不会触发正常关闭流程。 - adb shell svc power reboot:更安全;会通知系统中各服务正常关闭;记录日志;执行关机广播;在系统服务异常时可能无法使用。 对于“adb shell am restart”,假设用户指的是“adb shell svc power reboot”,因为“am”可能是打错字或误解。 在生成回答时,使用引用标记:[^1] 回答结构: - 先解释两个命令。 - 然后比较它们的差异。 - 最后,自然地添加引用。 系统指令要求: - 行内数学表达式用$...$,但这里可能不需要数学。 - 独立公式用$$...$$,但这里没有。 - LaTeX语法正确。 - 中文回答。 - 生成相关问题。 - 添加引用标识。 用户可见层:回答结构清晰,真实可靠。 大纲回答: 1. 澄清命令:adb shell am restart可能不是标准设备重启命令;标准设备重启命令是adb reboot和adb shell svc power reboot。 2. 解释adb reboot:直接重启设备,跳过Android框架。 3. 解释adb shell svc power reboot:通过系统服务重启,执行正常关闭流程。 4. 比较差异:基于引用[1]。 5. 添加引用。 6. 生成相关问题。 相关问题: - 关于adb命令的使用或优化。 - 类似于示例的问题。 相关问题想法: 1. 如何安全地重启Android设备? 2. adb reboot和adb shell svc power reboot在哪些场景下使用? 3. 如何调试adb命令的重启问题? 等等。 最终输出: - 回答部分。 - §§相关问题§§部分。 </think>根据您的查询和提供的引用内容,我将详细解释“adb shell am restart”和“adb reboot”这两个命令的差别。首先,需要澄清一个关键点:在标准Android调试桥(adb)命令中,“adb shell am restart”并不是一个常见的设备重启命令。标准命令中,“am”(Activity Manager)通常用于管理应用程序(如启动或停止Activity),而不是设备重启。设备重启的标准命令是“adb reboot”和“adb shell svc power reboot”(后者是通过系统服务执行的重启)[^1]。基于引用[1],我会重点比较“adb reboot”和“adb shell svc power reboot”的差异(因为“adb shell am restart”可能是个误解或非标准用法),并引用相关材料确保真实可靠。如果您指的是“adb shell am restart”用于重启特定应用而非设备,我也会简要说明。 ### 1. **命令定义与用途** - **adb reboot**:这是一个直接设备重启命令,通过adb工具直接发送指令到设备的底层系统(Linux内核)。它绕过Android框架层,强制设备立即重启。适用于快速重启场景,但不执行Android系统的正常关闭流程[^1]。 - **adb shell am restart**:这不是一个标准设备重启命令。“am”命令属于Activity Manager,用于管理应用程序生命周期(如启动或停止Activities)。如果输入“adb shell am restart”,它可能尝试重启一个特定应用程序(例如,通过包名),而不是整个设备。例如,“adb shell am force-stop [包名]”先停止应用,然后“adb shell am start [包名]”重新启动它。但这不是设备级操作[^2]。如果您查询的设备重启命令,可能意指“adb shell svc power reboot”,这是一个通过Android系统服务(如PowerManagerService)执行的安全重启命令[^1]。 ### 2. **核心差异分析** 根据引用[1],adb reboot和adb shell svc power reboot在行为和安全机制上有显著差别。以下是关键比较点: | 差异点 | adb reboot | adb shell svc power reboot | |--------|------------|----------------------------| | **执行层级** | 直接作用于设备底层(Linux内核),跳过Android Framework层[^1]。 | 通过Android系统服务(如`svc power`)执行,整合到框架层中[^1]。 | | **速度与效率** | 更快,因为它不触发任何Android服务或应用的关闭流程,直接重启硬件[^1]。 | 较慢,因为它需要通知并协调系统各服务(如Activity Manager、BroadcastReceiver)的正常关闭,增加了额外步骤[^1]。 | | **安全性与可靠性** | 风险较高:不执行正常关闭流程,可能导致数据丢失或文件系统损坏(例如,未保存的缓存或日志)。优点是,在系统服务崩溃(如Framework无响应)时仍可使用[^1]。 | 更安全:会发送关机广播、通知服务正常关闭(如保存状态和日志),减少数据丢失风险。缺点是,在系统服务异常(如Framework崩溃)时可能失效,因为它依赖这些服务[^1]。 | | **日志与流程** | 不记录关机日志或执行广播流程,调试困难。适合紧急修复场景[^1]。 | 会记录详细关机/重启日志,并执行标准关机广播(如`ACTION_SHUTDOWN`),便于事后分析。推荐在正常情况下使用[^1]。 | | **适用场景** | 适用于:设备卡死、系统无响应时快速重启;调试或自动化测试(如引用[3]中的脚本使用它实现循环重启)[^3]。 | 适用于:日常维护、更新后重启;需要确保数据完整性的场景(如生产环境)[^1]。 | ### 3. **为什么“adb shell am restart”可能引起混淆** - 在Android开发中,“am”命令主要用于应用管理(例如,`adb shell am start`启动Activity)。如果您输入“adb shell am restart”,系统可能报错或解释为重启特定应用(需指定包名)。例如: ``` adb shell am force-stop com.example.app # 先停止应用 adb shell am start com.example.app # 再启动应用(相当于“重启”应用) ``` 这与设备重启命令(adb reboot)完全不同:前者只影响单个应用,后者影响整个设备[^2]。为避免混淆,建议使用标准设备重启命令:adb reboot(快速但不安全)或adb shell svc power reboot(安全但较慢)[^1]。 ### 4. **实际建议** - 在正常情况下(如设备功能完好),优先使用`adb shell svc power reboot`以确保系统安全关闭[^1]。 - 在系统故障时(如adb devices检测到设备但无响应),使用`adb reboot`作为最后手段[^3]。 - 自动化脚本中(如引用[3]的循环重启测试),adb reboot更高效,但需添加延迟(如`sleep 50s`)等待设备启动[^3]。 总之,adb reboot是一个底层、快速但不安全的设备重启命令,而adb shell am restart并非标准设备重启命令——它可能被误解为应用级操作。正确对比应是adb reboot vs adb shell svc power reboot,后者提供更规范的Android框架集成[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值