android-phone-ops
连接、配置或排查用户已授权的 Android 实机时使用,涵盖无线 ADB、HyperOS 权限、APK 安装与无障碍/悬浮窗故障定位;普通 Android 代码开发且未操作手机时不使用。
SKILL.mdandroid-phone-ops/SKILL.md
GitHubAndroid 实机操作
目标是让手机上的真实功能工作,并在每一步区分系统授权、应用配置、接口和页面识别问题。以当前设备状态为准,不把历史 IP、端口、菜单位置或应用首页颜色当成事实。
连接与识别
- 先运行
adb devices -l;无线连接消失时看adb mdns services,再使用手机“无线调试”主页的“IP 地址和端口”。配对码页面的端口不是连接端口。无线端口、transport ID 和网段都会变化,重新连接后再选设备。 - 多台或多个 mDNS 连接同时出现时,用明确的
-s SERIAL或本次查询到的-t TRANSPORT_ID;先用设备型号、Android/系统版本确认目标,避免在错误设备上安装或点按。 - 复用已授权的 ADB;只有连接缺失且无法自动恢复时,才请用户提供当前连接地址或完成手机上的配对。
分层诊断
- 安装与身份:核对包名、版本、安装来源、签名,确认运行的 APK 是预期版本。
- 系统权限:分别核对无障碍服务的启用和绑定、悬浮窗 AppOp、通知/后台限制等实际状态。
settings get secure enabled_accessibility_services、dumpsys accessibility、cmd appops get PACKAGE可作证据;一个权限为allow不代表相关服务已经启用。 - 应用状态与接口:查看应用首页和设置,用应用内测试按钮验证接口。不要把“已就绪”当成聊天采集或弹窗已成功的证明。
- 前台页面与悬浮窗:用
dumpsys activity activities确认真实页面,用dumpsys window windows看目标包的悬浮窗口;再检查无障碍树、OCR 和应用日志。逐层定位是未触发、识别为空、接口失败,还是窗口没显示。
当截屏 API 报窗口受保护,或成功返回但 OCR 为 0 时,检查前台窗口的 SECURE 标志,并仅用尺寸、采样颜色数等统计确认是否为空白画面。FLAG_SECURE 会使无障碍和 ADB 抓屏都变黑;这时接口密钥、OCR 参数和悬浮窗修复都不能恢复画面。改用用户主动复制并粘贴文字的辅助流程,不尝试绕过系统保护。
通过 uiautomator dump 检查页面时,先确认本次导出成功;失败时 /sdcard 上可能仍是旧 XML。只提取诊断所需的包名、控件类、资源 ID、数量和状态。默认不输出聊天正文、联系人、密钥输入框内容或整张屏幕。需要截图时先考虑是否会暴露私人会话。
安装与权限变更
- 安装前核对 APK 来源、包名、版本和证书。相同签名的
adb install -r通常保留数据;不同签名不能覆盖。优先用不同包名的测试版做可逆验证,明确区分测试版与原版。 - 干净卸载会清除应用数据、密钥和已授予的设置;在这类后果尚未处理前,不用它试探性排障。构建或复制 APK 本身不应改动手机。替换安装前先让用户知道要重填什么。
- HyperOS 的“由受限设置控制”要以系统页面和实际服务状态确认。设置菜单因版本变化而异,不套用旧路径;不要把改应用状态检测当作解除系统限制,也不要直接改 secure settings 或 AppOps 来伪造授权。重新安装后仍要逐项验证。
INSTALL_FAILED_USER_RESTRICTED可能是手机侧安装确认未通过。先检查当前 UI 和用户是否主动拒绝;用户准备好后再重试,避免连续静默重试。- 无障碍风险确认是系统授权动作。结束或暂停时,关闭未完成的弹窗;临时测试服务应恢复到用户预期状态,并复核原应用是否仍启用。
密钥与应用数据
密钥只让用户在手机应用或其服务商页面输入。不要请用户把密钥发到聊天,也不要通过 UI dump、日志、截图、备份或 shell 输出读取密钥值。测试接口只报告成功、耗时和错误类型;不要输出请求体或聊天内容。
若任务涉及小米 14 上的 Jev v1.3,按需读取 Jev 实测案例。案例只记录截至当时的证据和交接状态,使用前重新核对设备、代码和权限。
若任务涉及 Tara 社交应用的资料、动态、公开任务或已授权的聊天,按需读取 Tara Android 实测操作,先核对当前版本与页面;不要把 AI 回复当作本人确认。