小米安卓真机ADB对硬件操作

提示词

角色设定 :你是一位精通 Android 系统底层、ADB 协议及 Python uiautomator2 框架的自动化专家。

任务目标 :请为我编写一份功能极其全面的 Python 自动化脚本,旨在全方位展示对安卓设备的控制能力。

核心要求

  1. 代码风格 :采用模块化设计,每个功能块需独立封装,严禁使用已废弃的旧版 API(如 set_location 等),优先使用 d.shell() 执行系统级指令以确保兼容性。

  2. 系统级操作:包含但不限于修改系统设置(亮度、休眠、显示触摸点)、切换飞行模式、清理缓存、获取详细电量信息、读取 CPU 实时频率、列出所有第三方 App 包名。

  3. 硬件级控制:包含但不限于模拟物理按键(音量、电源键长按)、触发硬件震动、强制旋转屏幕方向(横竖屏切换)、调节媒体/闹钟音量。

  4. 软件与交互:通过 Intent 快速直达系统页面(如 WiFi 设置、相册、电池统计页)、模拟剪贴板写入与读取(绕过安全限制)、截取当前屏幕并保存。

  5. 异常处理:代码需包含对常见 RPC 错误的捕获,尤其是在执行高权限 Shell 命令时的反馈处理。

  6. 结果输出:每个操作执行后,必须在 Python 控制台实时打印出系统的反馈结果(标准输出),格式要求美观易读。

环境说明 :设备已连接,IP 为 192.168.2.254:43435,系统环境为 MIUI/高版本安卓。

代码

python 复制代码
import uiautomator2 as u2
import time

# 连接设备
d = u2.connect("192.168.2.254:43435")

def section(title):
    print(f"\n{'='*10} {title} {'='*10}")

# 1. 声音硬件 (物理按键模拟)
section("声音硬件调节")
for _ in range(3):
    d.press("volume_up")
print("音量调节:已模拟物理按键增加音量")

# 2. 摄像头 (调用系统 Activity)
section("摄像头硬件测试")
d.shell("am start -a android.media.action.IMAGE_CAPTURE")
time.sleep(2)
d.screenshot("camera_preview.jpg")
print("摄像头:已拉起预览并截图保存")
d.app_stop("com.android.camera")

# 3. WiFi 连接详细扫描
section("WiFi 硬件扫描")
# 获取附近扫描到的 WiFi 热点
wifi_scan = d.shell("cmd -w wifi list-scan-results | head -n 5").output.strip()
print(f"附近 WiFi 信号:\n{wifi_scan if wifi_scan else '无法直接获取扫描列表'}")

# 4. 地理位置修复 (使用 Shell 指令模拟)
section("地理位置控制 (修复版)")
# 经纬度:116.3975, 39.9087 (北京)
# 注意:前提是在模拟器/手机设置 -> 开发者选项 -> 选择模拟位置应用 中选择了 ATX 或相关服务
try:
    # 尝试通过高级 shell 指令注入位置 (部分模拟器支持)
    d.shell("settings put secure location_mode 3") # 开启高精度定位模式
    print("位置:已尝试通过系统设置开启高精度定位")
    # 如果你安装了某些定位模拟插件,可以通过 am broadcast 发送
    # 这里我们演示通过 settings 注入模拟位置的开关
    d.shell("settings put global allow_mock_location 1")
    print("位置:已开启『允许模拟位置』开关")
except Exception as e:
    print(f"位置模拟由于系统限制失败: {e}")

# 5. 重力与旋转
section("重力感应控制")
d.shell("settings put system user_rotation 1") # 横屏
time.sleep(1)
d.shell("settings put system user_rotation 0") # 竖屏
print("重力感应:横竖屏切换测试完成")

# 6. APP 清单与磁盘瘦身 (针对你 97% 磁盘占用的修复)
section("系统资源管理")
# 列出最近安装的 10 个第三方应用及其路径
app_list = d.shell("pm list packages -3 -f | tail -n 10").output.strip()
print(f"最近第三方 APP 清单:\n{app_list}")

# 针对你磁盘空间不足的警告,执行清理
print("\n正在尝试清理系统冗余缓存以释放空间...")
d.shell("pm trim-caches 10G") 
# 删除所有临时文件
d.shell("rm -rf /sdcard/*.tmp /sdcard/*.log")
print("清理指令执行完毕")

# 7. 相册与媒体库
section("相册硬件访问")
d.shell("am start -a android.intent.action.PICK -t image/*")
time.sleep(2)
d.press("home")
print("相册:已通过 Intent 尝试拉起图片选择器")

print("\n" + "="*35)
print("硬件操控演示 5.0 全部执行完毕")

结果

相关推荐
恋猫de小郭7 分钟前
Firebase 如何让全球 Android 和 Flutter 开发者集体 Build Fail
android·前端·flutter
我命由我1234525 分钟前
Android Camera - 获取当前设备屏幕的旋转角度、保存帧到外部存储的私有空间
android·java·开发语言·java-ee·android jetpack·android-studio·android runtime
DogDaoDao41 分钟前
HarmonyOS 深度解析:从微内核到 ArkTS 工程实战
android·linux·ios·华为·程序员·harmonyos·harmonyos next
小成很成10 小时前
mysql 8.0.21 升级 mysql 8.0.45(经过生产环境验证)
android·mysql·adb
虎王物联14 小时前
PHP实现MQTT消息处理:物联网设备数据接收与指令下发
android·物联网·php
我命由我1234514 小时前
Android 开发 - 获取当前设备屏幕的旋转角度
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
程序员-Benothing16 小时前
MySQL 索引下推是什么?——深入理解 ICP 原理与实践
android·数据库·mysql
怀化纱厂球迷16 小时前
百度地图--android接入百度地图导航
android
AFinalStone17 小时前
Android 7系统无障碍服务(四)AccessibilityEvent 的产生与投递
android·无障碍服务