小米安卓真机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 全部执行完毕")

结果

相关推荐
嗷o嗷o2 小时前
Android BLE 为什么连上了却收不到数据
android
pengyu2 小时前
【Kotlin 协程修仙录 · 炼气境 · 后阶】 | 划定疆域:CoroutineScope 与 Android 生命周期的绑定艺术
android·kotlin
朝星2 小时前
Android开发[5]:组件化之路由+注解
android·kotlin
随遇丿而安2 小时前
Android全功能终极创作
android
随遇丿而安2 小时前
第1周:别小看 `TextView`,它其实是 Android 页面里最常被低估的组件
android
norq juox2 小时前
MySQL 导出数据
数据库·mysql·adb
summerkissyou19875 小时前
Android-基础-SystemClock.elapsedRealtime和System.currentTimeMillis区别
android
ian4u5 小时前
车载 Android C++ 完整技能路线:从基础到进阶
android·开发语言·c++