通过Python 获取Android设备信息的轻量级框架
作者:马飞 发布时间:2021-08-18 21:41:00
标签:python,android,轻量级框架
今天跟大家分享一下,如何通过Python实现一个轻量级的库来获取电脑上连接的Android设备信息,为什么说轻量呢因为整个库也就4KB,相比其他诸如Appetizer这样动辄就8MB多的库要轻很多,而且也基本满足项目中的需求。
这个库只有一个文件,通过封装Android的ADB命令实现,返回的是一个包含所有设备信息的标准json格式的列表方便解析,下面简单介绍一下:
检查环境变量
# 判断是否设置环境变量ANDROID_HOME
if "ANDROID_HOME" in os.environ:
command = os.path.join(
os.environ["ANDROID_HOME"],
"platform-tools",
"adb")
else:
raise EnvironmentError(
"Adb not found in $ANDROID_HOME path: %s." %
os.environ["ANDROID_HOME"])
命令执行
class Shell:
def __init__(self):
pass
@staticmethod
def invoke(cmd):
output, errors = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
o = output.decode("utf-8")
return o
ADB命令封装
class ADB(object):
"""
参数: device_id
"""
def __init__(self, device_id=""):
if device_id == "":
self.device_id = ""
else:
self.device_id = "-s %s" % device_id
def adb(self, args):
cmd = "%s %s %s" % (command, self.device_id, str(args))
return Shell.invoke(cmd)
def shell(self, args):
cmd = "%s %s shell %s" % (command, self.device_id, str(args),)
return Shell.invoke(cmd)
def get_device_state(self):
"""
获取设备状态: offline | bootloader | device
"""
return self.adb("get-state").stdout.read().strip()
def get_device_id(self):
"""
获取设备id号,return serialNo
"""
return self.adb("get-serialno").stdout.read().strip()
def get_android_version(self):
"""
获取设备中的Android版本号,如4.2.2
"""
return self.shell(
"getprop ro.build.version.release").strip()
def get_sdk_version(self):
"""
获取设备SDK版本号,如:24
"""
return self.shell("getprop ro.build.version.sdk").strip()
def get_product_brand(self):
"""
获取设备品牌,如:HUAWEI
"""
return self.shell("getprop ro.product.brand").strip()
def get_product_model(self):
"""
获取设备型号,如:MHA-AL00
"""
return self.shell("getprop ro.product.model").strip()
def get_product_rom(self):
"""
获取设备ROM名,如:MHA-AL00C00B213
"""
return self.shell("getprop ro.build.display.id").strip()
设备信息获取
class DeviceInfo:
def __init__(self, uid, os_type, os_version, sdk_version, brand, model, rom_version):
self.uid = uid
self.os_type = os_type
self.os_version = os_version
self.sdk_version = sdk_version
self.brand = brand
self.model = model
self.rom_version = rom_version
class Device:
def __init__(self):
pass
@staticmethod
def get_android_devices():
android_devices_list = []
android_devices_infos = []
for device in Shell.invoke('adb devices').splitlines():
if 'device' in device and 'devices' not in device:
device = device.split('\t')[0]
android_devices_list.append(device)
for device_uid in android_devices_list:
device_info = DeviceInfo(device_uid, "Android", ADB(device_uid).get_android_version(),
ADB(device_uid).get_sdk_version(),
ADB(device_uid).get_product_brand(), ADB(device_uid).get_product_model(),
ADB(device_uid).get_product_rom())
android_devices_infos.append(device_info.__dict__)
return android_devices_infos
设备信息数据结构
[
{
"uid": "BY2WKN1519078327",
"rom_version": "Che2-UL00 V100R001CHNC00B287",
"brand": "Honor",
"os_version": "4.4.2",
"sdk_version": "19",
"os_type": "Android",
"model": "Che2-UL00"
},
{
"uid": "GWY0217414001213",
"rom_version": "MHA-AL00C00B213",
"brand": "HUAWEI",
"os_version": "7.0",
"sdk_version": "24",
"os_type": "Android",
"model": "MHA-AL00"
}
]
总结
以上所述是小编给大家介绍的通过Python 获取Android设备信息的轻量级框架网站的支持!
来源:http://mafei.me/2017/12/17/Python%20%7C%20%E8%8E%B7%E5%8F%96Android%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7%E6%A1%86%E6%9E%B6/?utm_source=tuicool&utm_medium=referral
0
投稿
猜你喜欢
- 如何阻止别人非法链接你网站的图片,防盗链?getimage.asp<% Option ExplicitDim&nb
- 本文实例讲述了Python利用前序和中序遍历结果重建二叉树的方法。分享给大家供大家参考,具体如下:题目:输入某二叉树的前序遍历和中序遍历的结
- 什么是爬虫?网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息
- 一个非常简单的将半角"转换为中文"的asp函数function new_str(str) 
- 表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 内容摘要:统计在线人数的方法很多,可以使用Application来统计在线人数,也可以使用IP来统计在线人数。各有优点。本文介绍了通过判断S
- 人生苦短,菜鸟学Python!今天,我们会一次性分享6个堪称神仙的内置函数。在很多计算机书籍中,它们也通常作为高阶函数来介绍。而我自己在日常
- 对于经常需要表格头部不东,而列表可以滚动,多用于数据比较多的情况,方便查看<!DOCTYPE HTML PUBLIC "-/
- SVM支持向量机是建立于统计学习理论上的一种分类算法,适合与处理具备高维特征的数据集。SVM算法的数学原理相对比较复杂,好在由于SVM算法的
- python线程池ThreadPoolExecutor,传单个参数和多个参数这是线程池传单个参数的from concurrent.futur
- 运行结果:程序代码如下:#将excel中的数据进行读取分析import openpyxlimport numpy as npimport m
- 1、简述asp的6个内置对象和其功能答案 : session ,server ,response,request,objectcontext
- 一:队列配置队列的配置文件放置在config/queue.php文件中,laravel框架中支持的队列驱动有:sync, database,
- 最近用php进行文件目录信息读取,在网上弄到下面一段代码://获取指定目录下的文件列表//$path 指定的目录,默认为当前目录//$ifc
- 常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh:301 redirect: 301代表
- 引言:在微信小程序里,比如商品展示页面的商品详情会有图片展示,PC端设置的商品详情是PC端的宽度,所以在小程序里图片会显示不全,这时就应该做
- phpinfo函数phpinfo函数 PHP中提供了PHPInfo()函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充
- 组合集总计: group by with rollup/cube grouping sets 子查询按执行方式分:标准子查询、关联子查询 标
- 检测submit事件的冒泡情况:<!doctype html><html dir="ltr" lang