Pyqt adb 获取Android手机屏幕
adb的全称为Android Debug Bridge,就是起到调试桥的作用。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。
adb下载地址:
http://files.cnblogs.com/files/dcb3688/adb.7z
adb命令:
| Category | Command | Description | Comments |
|---|---|---|---|
| Options | -d |
仅仅通过USB接口来管理abd. | 如果不只是用USB接口来管理则返回错误. |
-e |
仅仅通过模拟器实例来管理adb. | 如果不是仅仅通过模拟器实例管理则返回错误. | |
-s <serialNumber> |
通过模拟器/设备的允许的命令号码来发送命令来管理adb (比如: "emulator-5556"). | 如果没有指定号码,则会报错. | |
| General | devices |
查看所有连接模拟器/设备的设施的清单. | 查看 Querying for Emulator/Device Instances获取更多相关信息. |
help |
查看adb所支持的所有命令。. | ||
version |
查看adb的版本序列号. | ||
| Debug | logcat [<option>] [<filter-specs>] |
将日志数据输出到屏幕上. | |
bugreport |
查看bug的报告,如dumpsys ,dumpstate ,和logcat 信息。 |
||
jdwp |
查看指定的设施的可用的JDWP信息. | 可以用 forward jdwp:<pid> 端口映射信息来连接指定的JDWP进程.例如: adb forward tcp:8000 jdwp:472 jdb -attach localhost:8000 |
|
| Data | install <path-to-apk> |
安装Android为(可以模拟器/设施的数据文件.apk指定完整的路径). | |
pull <remote> <local> |
将指定的文件从模拟器/设施的拷贝到电脑上. | ||
push <local> <remote> |
将指定的文件从电脑上拷贝到模拟器/设备中. | ||
| Ports and Networking | forward <local> <remote> |
用本地指定的端口通过socket方法远程连接模拟器/设施 | 端口需要描述下列信息:
|
ppp <tty> [parm]... |
通过USB运行ppp:
需要提醒你的不能自动启动PDP连接. |
||
| Scripting | get-serialno |
查看adb实例的序列号. | 查看 Querying for Emulator/Device Instances可以获得更多信息. |
get-state |
查看模拟器/设施的当前状态. | ||
wait-for-device |
如果设备不联机就不让执行,--也就是实例状态是 device 时. |
你可以提前把命令转载在adb的命令器中,在命令器中的命令在模拟器/设备连接之前是不会执行其它命令的. 示例如下:
adb wait-for-device shell getprop 需要提醒的是这些命令在所有的系统启动启动起来之前是不会启动adb的 所以在所有的系统启动起来之前你也不能执行其它的命令. 比如:运用 adb wait-for-device install <app>.apk 上面的命令只有连接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启动前执行就会有错误发生. |
|
| Server | start-server |
选择服务是否启动adb服务进程. | |
kill-server |
终止adb服务进程. | ||
| Shell | shell |
通过远程shell命令来控制模拟器/设备实例. | 查看 获取更多信息 for more information. |
shell [<shellCommand>] |
连接模拟器/设施执行shell命令,执行完毕后退出远程shell端l. |
通过adb shell screencap -p 获取手机屏幕
代码如下:
# -*- coding: UTF8 -*-
from PyQt4.QtGui import *
import sys, os, time
from PyQt4.QtCore import * class myadb(QDialog):
def __init__(self):
super(myadb, self).__init__()
self.Xsize = 480
self.Ysize = 850
self.resize(self.Xsize, self.Ysize)
self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint)
self.Theading = MyTheading()
self.connect(self.Theading, SIGNAL("updatescreen"), self.update)
self.Theading.start() # 线程开始 def paintEvent(self, event):
painter = QPainter()
painter.begin(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.drawPixmap(0, 0, self.Xsize, self.Ysize, QPixmap("C:\\screen.png"))
painter.end() class MyTheading(QThread):
def __init__(self):
super(MyTheading, self).__init__() def run(self):
while True:
command = 'adb shell screencap -p /sdcard/screen.png '
os.system(command)
cmdpic = "adb pull /sdcard/screen.png C:\\screen.png "
os.system(cmdpic)
self.emit(SIGNAL("updatescreen")) if __name__ == '__main__':
app = QApplication(sys.argv)
appadb = myadb()
appadb.show()
app.exit(appadb.exec_())
运行报错:
adb server is out of date. killing....
原因在于ADB server没有成功启动,其端口被占用
首先查找对应端口:
adb nodaemon server
cannot bind 'tcp:5037'
继续查找此端口具体被哪个进程所占用了
netstat -ano | findstr ""
找到后将相应进程kill掉,(我的电脑是tadb.exe 占用)然后在执行脚本
效果:

Pyqt adb 获取Android手机屏幕的更多相关文章
- 获取Android 手机屏幕宽度和高度以及获取Android手机序列号
1.获取Android 手机屏幕宽度 1 DisplayMetrics dm = new DisplayMetrics(); 2 this.getWindowManager().getDefaultD ...
- 通过ADB获取Android手机信息
原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CPU,厂商名称等)adb shell "ca ...
- adb 获取Android手机信息命令(2)
#Android命令 #获取手机名称 GET_PHONE_NAME = 'adb shell getprop ro.product.model' #获取手机版本 GET_PHONE_VERSION = ...
- adb 获取Android手机信息命令(1)
@set version=1.7.2Normal @echo ============================================================= @echo I ...
- 获取android手机屏幕的宽高、density
public static String getDisplayMetrics(Context cx) { String str = ""; DisplayMetrics dm = ...
- 获取Android设备屏幕分辨率
1.Android 4.3引入的wm工具: a.获取Android设备屏幕分辨率: adb shell wm size b.获取android设备屏幕密度: adb shell wm density ...
- Unity3D Android手机屏幕分辨率问题
Android手机屏幕分辨率五花八门,导致开发时不好把握,还好各个引擎对这个屏幕分辨率问题都有较好的处理方式:unity3D 也为我们提供了一个不错的解决方案. 在Unity3D 进行 android ...
- 关于Android的Build类——获取Android手机设备各种信息
经常遇到要获取Android手机设备的相关信息,来进行业务的开发,比如经常会遇到要获取CPU的类型来进行so库的动态的下载.而这些都是在Android的Build类里面.相关信息如下: private ...
- Ubuntu使用adb连接android手机失败unknown的解决的方法
Ubuntu使用adb连接android手机失败unknown的解决的方法 Ubuntu下通过USB数据线连接G11手机后,adb可能无法识别到设备.依照一下步骤能够解决此问题. 1.在termi ...
随机推荐
- VS使用技巧——统计代码行数
通常为了统计一个文件或者一整个解决管理方案中代码行量,可能会选择定位来获取行量,但是当文件尤其大时,传统方式就不行了,这里推荐使用正则表达式搜索统计,可以快速获取目标文档的总代码量. Tips: ct ...
- bzoj4591 【Shoi2015】超能粒子炮·改
由Lucas定理C(n,k)=C(n/2333,k/2333)*C(n%2333,k%2333)%2333 则ans=ΣC(n,i),(i<=k) =C(n/2333,0)*C(n%2333, ...
- NOIP2016呵呵记
经过了一年的想象和臆测,经历了学长们的几次考试,通过老师的言语莫名感受过了所谓oi式压力之后,自己的考试也终于到来了. 考前的生活也没有想象中的那么充实,无非跟着神犇刷刷题,讨论算法,学点新技巧,然后 ...
- <<< html5本地储存
类似与Cookies,但由于Cookies储存量太小,大小也只有4-5KB的样子,html5的本地储存能存5M大小的数据 html5本地储存属性有,localStorage和sessionStorag ...
- 面试题目——《CC150》链表
面试题2.1:编写代码,移除未排序链表中的重复结点 进阶:如果不得使用临时缓冲区,该怎么解决? package cc150; import java.util.HashMap; import java ...
- Schema
Schema约束 1.namespace 相当于schema文件的id 2.targetNamespace属性 用来指定schema文件的namespace的值 3.xmlns属性 引入一个约束,它的 ...
- 4Struts2标签库----青软S2SH(笔记)
这里弄错了,这一堆属性是<datetimepicker>标签的,不是<doubleselect>标签的 输出错误信息这个不错,挺方便的. 这个树形标签,也用了好多网络,分析如下 ...
- Shell case esac语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- MRDS学习二——机械车
准备机械车: 第一步:从Service中选择一个Generic Differential Drive (通用差速驱动:同一轴的左右轮胎可以转动不同速度的车子)放入Diagram中. 第二步:对其进行配 ...
- H5播放器
<!DOCTYPE html> <html> <body> <div style="text-align:center"> ...