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 ...
随机推荐
- ecliplse高亮显示选中的相同变量
选择:windows-> preferences->java->Editor->Mark Occurences 选择最上的复选框,下面的就有很多了. 其中的Local vari ...
- eclipse关闭编译时不必要的校验
- 浅谈:java泛型与dao重用
在进入今天的主题之前,我们先理解一下什么是泛型: 泛型是java中一种类型,泛型是被参数化的类型. 类型-->class 参数化-->class类型可以是任意参数 泛型存在的意义:泛型可以 ...
- Android开发笔记之《Window下安装Ubuntu双系统,Grub无法显示Window选项》
解决方法是: 在terminal里面输入: sudo update-grub 会找到windows的grub 重启电脑就可以了.
- SaaS模式的软件
SaaS是Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式.它与"on-demand ...
- 平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#
个人亲自编写.测试,可以正常使用 道理看原文,这里不多说 网上找到的几篇基本都不能用的 C#代码 bool Equal(float f1, float f2) { return (Math ...
- Charles抓Android的数据包
1. 获得Mac OS的IP地址 2. 对Android手机设置代理,主机IP是步骤1中获得的IP,端口8888
- wordpress 函数、条件判断以及文件的总结
WordPress基本模板文件 一套完整的WordPress模板应至少具有如下文件: style.css : CSS(样式表)文件 index.php : 主页模板 archive.php : Arc ...
- IIS错误处理集合
1.编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\ya ...
- 关于学习angularJS 的 心里路程(二)
这一次主要的学习内容是 ng-route(本次的项目由于种种原因吧,我们采用了ui-router,而不是原生的ng-route) * 配置路由. * 注意这里采用的是ui-router这个路由,而不是 ...