adb常见非常处理

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
adb devices 没有体现连接设备

当你在下令行中运行 adb devices 而没有看到任何已连接的设备时,大概是由于多种原因造成的。这里有一些排查步骤可以帮助你解决这个题目:

  • 查抄USB连接:

    • 确保你的Android设备已经正确地连接到了电脑上。
    • 实验更换USB线缆或电脑上的USB端口。
    • 确保设备处于解锁状态,而且没有进入恢复模式大概飞行模式等特殊状态。

  • 启用开发者选项:

    • 在你的Android设备上,前去“设置” > “关于手机” > “软件信息”,找到“版本号”或“内部版本号”,连续点击7次以启用“开发者选项”。
    • 返回“设置”菜单,找到“开发者选项”并打开它。

  • 启用USB调试:

    • 在“开发者选项”中找到“USB调试”选项,并勾选以启用它。

  • 确认ADB是否安装正确:

    • 确认你的电脑上是否已经安装了最新版本的ADB工具。
    • 如果你使用的是Android SDK Platform-Tools包中的ADB,确保情况变量设置正确,即PATH变量包含了ADB地点的文件夹路径。

  • 重启ADB服务:

    • 在下令行中输入 adb kill-server 来关闭ADB服务,然后输入 adb start-server 重新启动服务。

  • 查抄USB驱动程序:

    • 确保你的电脑上已经安装了针对你设备型号的USB驱动程序。
    • 对于Windows体系,可以在设备管理器中检察USB设备是否有黄色感叹号等错误标记。
    • 对于Linux体系,大概需要在/etc/udev/rules.d/51-android.rules文件中添加适当的规则,以便正确识别设备。

  • 查抄ADB权限:

    • 如果你在Linux或macOS上运行ADB,大概需要使用sudo大概将ADB加入到体系的sudoers列表中。
    • 在某些Linux发行版中,你大概还需要将用户添加到plugdev组以获得USB访问权限。

  • 检察ADB输出:

    • 运行 adb logcat 或 adb logcat -v time 可以帮助你获取更多关于ADB的诊断信息。

  • 实验使用差别的设备:

    • 如果大概的话,实验连接另一个Android设备看看是否能够被识别。

  • 查抄Android设备设置:

    • 在设备的“开发者选项”中,查抄是否启用了“USB调试”选项。
    • 确认设备是否答应电脑通过USB进行调试。

  • 安全权限题目
    有的公司出于安全思量,由于adb可以推送文件得手机,adb被视为敏感权限,需要走审批流程,审批完之后再检检察看。
adb.exe: device unauthorized

当你遇到 “device unauthorized” 的错误时,这意味着你的设备拒绝了来自电脑的连接请求。这通常是由于设备的安全设置,特殊是当设备从未与电脑配对过大概设备的安全设置比较严酷时会发生这种情况。
要解决这个题目,你可以实验以下步骤:

  • 重新启动设备:有时间简单地重启设备就可以解决题目。
  • 查抄 USB 调试设置

    • 在设备上打开“设置”应用。
    • 探求“关于手机”或“关于设备”选项。
    • 找到“版本号”或“构建号”,连续点击 7 次以启用“开发者选项”。
    • 返回到主设置菜单,探求“开发者选项”。
    • 在“开发者选项”中找到并启用“USB 调试”。

  • 重新授权电脑

    • 断开设备与电脑的连接。
    • 再次连接设备。
    • 当设备提示是否答应 USB 调试时,选择“答应”。

  • 查抄 USB 驱动

    • 确保安装了正确的 USB 驱动。如果你使用的是 Windows,可以在设备管理器中检察是否有未知设备或带有黄色感叹号的设备。
    • 你可以从设备制造商的官方网站下载最新的 USB 驱动。

  • 使用差别的 USB 线或端口

    • 实验更换 USB 数据线或使用电脑的差别 USB 端口。

  • 禁用安全软件

    • 有时安全软件大概会阻止设备与电脑的连接。临时禁用安全软件看是否能够解决题目。

  • 查抄 ADB 版本

    • 确保你使用的 ADB 工具是最新的版本。你可以从 Android 开发者网站下载最新版本的 ADB。

  • 重置 ADB 键

    • 在下令提示符或终端中运行以下下令来重置 ADB 键:
      1. adb kill-server
      2. adb start-server
      复制代码
    • 这将关闭并重新启动 ADB 服务。

  • 使用 fastboot 模式

    • 如果以上方法都无法解决题目,你可以实验进入 fastboot 模式,然后再次实验连接。

      • 关闭设备。
      • 连接设备到电脑。
      • 按住电源键和音量减小键进入 fastboot 模式。
      • 在下令提示符或终端中运行 fastboot devices 确认设备是否被识别。
      • 一旦确认设备被识别,可以实验退出 fastboot 模式,再次实验连接。


adb shell dumpsys activity | findstr "mFocusedActivity"获取不得手机运行APP上的activity但是可以获取模拟器上运行的相同APP的activity

当你能够在模拟器上乐成获取 Activity 信息,但在实际手机设备上却不能获取时,这大概是由几个原因造成的:

  • 设备权限题目

    • 实际设备大概没有完全授权你的电脑进行调试。请确保 USB 调试已启用,而且你已经接受过授权对话框。
    • 某些设备大概对体系服务的访问有限制,纵然 USB 调试已启用也大概无法访问全部体系服务。

  • 安全设置差异

    • 模拟器通常默认答应更多访问权限,而实际设备大概有更严酷的限制。
    • 有些设备大概有额外的安全层,比方 SELinux,它大概会限制 dumpsys 下令的输出。

  • 设备驱动题目

    • 确保你已经为实际设备安装了正确的 USB 驱动。

  • ADB 版本差异

    • 模拟器和实际设备大概使用的 ADB 版本差别,某些版本大概有兼容性题目。

  • OEM 自定义

    • 差别厂商的设备大概对体系进行了定制,这大概影响 dumpsys 下令的行为。

  • 体系服务差异

    • 模拟器和实际设备上的体系服务大概有所差别,导致某些下令的效果不同等。

解决方案


  • 确认授权

    • 确保 USB 调试已在实际设备上启用。
    • 断开并重新连接设备,确认是否出现了授权对话框,并接受授权。

  • 查抄 SELinux 状态

    • 运行 adb shell getenforce 检察 SELinux 的状态。如果它处于 “Enforcing” 状态,某些体系服务大概受限。
    • 如果 SELinux 限制了访问,你大概需要查找相关的 SELinux 计谋文件并调整计谋以答应访问。

  • 查抄 ADB 版本

    • 确保你使用的 ADB 版本与设备兼容。你可以通过 adb version 下令检察 ADB 版本。

  • 更新驱动

    • 确保你安装了正确的 USB 驱动。你可以从设备制造商的官方网站下载最新的 USB 驱动。

  • 使用差别的下令

    • 试试使用 adb shell dumpsys activity top
      下令来获取当前 Activity 的信息。这通常会提供更简洁的输出,更轻易剖析。

  • 检察日志

    • 使用 adb logcat 下令检察日志,看看是否有与 dumpsys 下令相关的题目或错误信息。

示例下令

使用 adb shell dumpsys activity top
来获取当前 Activity 的信息:
  1. adb shell dumpsys activity top
复制代码
提取当前 Activity 的名称:
  1. @echo offsetlocal enabledelayedexpansionfor /f "tokens=2 delims=:" %%a in ('adb shell dumpsys activity top
  2. ') do (    set "activity_name=%%a"    set "activity_name=!activity_name:~2!"    echo Current Activity: !activity_name!)endlocal
复制代码
7.使用 adb shell dumpsys window windows | findstr mCurrentFocus 下令获取当前聚焦的窗口信息。这个下令通常可以用来获取当前最前端 Activity 的信息。
示例下令

你可以使用以下下令来获取当前聚焦的 Activity:
  1. adb shell dumpsys window windows | findstr "mCurrentFocus"
复制代码
剖析输出

下令的输出通常会包含当前聚焦窗口的信息,格式类似于:
  1. mCurrentFocus=Window{... com.example.app/.MainActivity}
复制代码
这里的 com.example.app/.MainActivity 是当前 Activity 的完备名称,此中 com.example.app 是应用的包名,.MainActivity 是 Activity 的名称。
提取 Activity 名称

为了提取 Activity 的名称,你可以使用以下批处理脚本:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%a in ('adb shell dumpsys window windows') do (
  4.     set "window_info=%%a"
  5.     if "!window_info:~0,13!" == "mCurrentFocus=" (
  6.         set "activity_name=!window_info:~14!"
  7.         echo Current Activity: !activity_name!
  8.     )
  9. )
  10. endlocal
复制代码
这个脚本会查找 mCurrentFocus= 的行,并从中提取 Activity 的名称。
注意事项



  • 确保你的设备已经连接到电脑,而且开启了 USB 调试。
  • 如果你在运行下令时遇到权限题目,实验使用 sudo 大概将脚本放在具有适当权限的目次下。
  • 如果你发现输出中有多个 Activity,这大概是由于应用正在后台运行,而另一个 Activity 正在前台运行。在这种情况下,你需要查抄输出中的 mCurrentFocus 一行。
这个下令应该可以在未 root 的设备上工作,由于它不需要特殊权限来获取当前 Activity 的信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表