Pyqt adb 獲取Android手機螢幕

2021-09-07 00:11:40 字數 3800 閱讀 4187

adb的全稱為android debug bridge,就是起到除錯橋的作用。adb的工作方式比較特殊,採用監聽socket tcp 5554等埠的方式讓ide和qemu通訊,預設情況下adb會daemon相關的網路埠,借助adb工具,我們可以管理裝置或手機模擬器的狀態。還可以進行很多手機操作,如安裝軟體、系統公升級、執行shell命令等等。其實簡而言說,adb就是連線android手機與pc端的橋梁,可以讓使用者在電腦上對手機進行全面的操作。

adb命令:

category

command

description

comments

options

-d僅僅通過usb介面來管理abd.

如果不只是用usb介面來管理則返回錯誤.

-e僅僅通過模擬器例項來管理adb.

如果不是僅僅通過模擬器例項管理則返回錯誤.

-s通過模擬器/裝置的允許的命令號碼來傳送命令來管理adb (比如: "emulator-5556").

如果沒有指定號碼,則會報錯.

general

devices檢視所有連線模擬器/裝置的設施的清單.

檢視 querying for emulator/device instances獲取更多相關資訊.

help檢視adb所支援的所有命令。.

version檢視adb的版本序列號.

debug

logcat將日誌資料輸出到螢幕上.

bugreport檢視bug的報告,如dumpsys,dumpstate,和logcat資訊。

jdwp檢視指定的設施的可用的jdwp資訊.

可以用forward jdwp:埠對映資訊來連線指定的jdwp程序.例如: 

adb forward tcp:8000 jdwp:472

jdb -attach localhost:8000

data

install安裝android為(可以模擬器/設施的資料檔案.apk指定完整的路徑).

pull將指定的檔案從模擬器/設施的拷貝到電腦上.

push將指定的檔案從電腦上拷貝到模擬器/裝置中.

ports and networking

forward用本地指定的埠通過socket方法遠端連線模擬器/設施

埠需要描述下列資訊:

ppp [parm]...通過usb執行ppp:

需要提醒你的不能自動啟動pdp連線.

scripting

get-serialno檢視adb例項的序列號.

檢視 querying for emulator/device instances可以獲得更多資訊.

get-state檢視模擬器/設施的當前狀態.

wait-for-device如果裝置不聯機就不讓執行,--也就是例項狀態是device時.

server

start-server選擇服務是否啟動adb服務程序.

kill-server終止adb服務程序.

shell

shell通過遠端shell命令來控制模擬器/裝置例項.

檢視 獲取更多資訊 for more information.

shell連線模擬器/設施執行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 = 480self.ysize = 850self.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()

#執行緒開始

defpaintevent(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__

()

defrun(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__

':

執行報錯:

adb server is out of date.  killing....
原因在於adb server沒有成功啟動,其埠被占用

首先查詢對應埠:

adb nodaemon server

cannot bind 'tcp:5037'

繼續查詢此埠具體被哪個程序所占用了

netstat -ano | findstr "

5037

"

找到後將相應程序kill掉,(我的電腦是tadb.exe 占用)然後在執行指令碼

效果:

Windows系統下無線鏈結android

cmd console shell netsh wlan show drivers 顯示 支援的承載網路 是 則可以執行下面的步驟。檢視承載網路狀態 shell netsh wlan show hostednetwork 開啟承載網路 shell netsh wlan set hostednetwo...

HBuilder連線不上逍遙Android模擬器

一 hbuilder安裝目錄中tools資料夾下的三個檔案 adb.exe,adbwinapi.dll,adbwinusbapi.dll複製到到逍遙模擬器安裝目錄的memu的中 注 我的hbuilder目錄 e pheonix installpath hbuilder.7.5.1.windows h...

Mac中編譯FFmpeg教程 Android版

本篇文章主要介紹在mac環境中,編譯ffmpeg生成so庫。本次編譯的環境如下 export android ndk root users jiangshuaijie android ndk r14b build export path 然後在命令列中輸入ndk build測試環境是否配置成功。sl...