Python | 获取Android设备信息的轻量级框架

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 今天跟大家分享一下,如何通过Python实现一个轻量级的库来获取电脑上连接的Android设备信息,为什么说轻量呢因为整个库也就4KB,相比其他诸如Appetizer这样动辄就8MB多的库要轻很多,而且也基本满足项目中的需求。这个库只有一个文件,通过封装Android的ADB命令实现,返回的是一个包含所有设备信息的标准json格式的列表方便解析,下面简单介绍一下

检查环境变量


#判断是否设置环境变量ANDROID_ HOME
if "ANDROID_ HОME" in os. environ:
    command = os. path. join(
        os.environ["ANDROID_HОME"],
        "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,stder-subprocess PIPF).communicate()
       o=output.decode("utf-8")
       return 0


ADB命令封装


class ADB(object):
参数:device_id
def init(self,device id=""):
if device id =="":
self.device_id ="" else:
self.device id="-ss"deviceid
def adb(self,args):
cmd="8S8S8S"%(commandselfdeviceid,str(arqs)) return Shell.invoke(cmd)
def shell(self,args):
cmd ="gs 8s shell &s"%(commandselfdevice id
str(args),)
return Shellinvoke(cmd)
def get device state(self):
获取设备状态:offline|bootloaderdevice
return self.adb("get-state).stdoutread().strip()
def get_device_id(self):
获取设备id号,return serialNo
return self.adb("get-serialno")stdoutread().strip()
def get android version(self):
获取设备中的Android版本号,如4.2.2
return self.shell(
"getprop ro.build.versionrelease")strip()
def get_sdk version(self):
获取设备SDK版本号,如:24
return self.shell("getprop ro.buildversionsdk)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 'devicesnot in device:
device=devicesplit("\t)[0]
android devices listappend(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-ALO0"}


相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
15天前
|
数据采集 存储 API
在信息时代,Python爬虫用于自动化网络数据采集,提高效率。
【7月更文挑战第5天】在信息时代,Python爬虫用于自动化网络数据采集,提高效率。基本概念包括发送HTTP请求、解析HTML、存储数据及异常处理。常用库有requests(发送请求)和BeautifulSoup(解析HTML)。基本流程:导入库,发送GET请求,解析网页提取数据,存储结果,并处理异常。应用案例涉及抓取新闻、商品信息等。
39 2
|
1天前
|
JSON 中间件 数据处理
实践出真知:通过项目学习Python Web框架的路由与中间件设计
【7月更文挑战第19天】探索Python Web开发,掌握Flask或Django的关键在于理解路由和中间件。路由连接URL与功能,如Flask中@app.route()定义请求响应路径。中间件在请求处理前后执行,提供扩展功能,如日志、认证。通过实践项目,不仅学习理论,还能提升构建高效Web应用的能力。示例代码展示路由定义及模拟中间件行为,强调动手实践的重要性。
|
17天前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
1天前
|
中间件 API 开发者
深入理解Python Web框架:中间件的工作原理与应用策略
【7月更文挑战第19天】Python Web中间件摘要:**中间件是扩展框架功能的关键组件,它拦截并处理请求与响应。在Flask中,通过`before_request`和`after_request`装饰器模拟中间件行为;Django则有官方中间件系统,需实现如`process_request`和`process_response`等方法。中间件用于日志、验证等场景,但应考虑性能、执行顺序、错误处理和代码可维护性。
7 0
|
5天前
|
存储 关系型数据库 数据库
我将提供一个简化的Python代码示例和详解,以展示如何使用Python和Django框架来构建智能化小区综合物业管理系统的一部分功能。
我将提供一个简化的Python代码示例和详解,以展示如何使用Python和Django框架来构建智能化小区综合物业管理系统的一部分功能。
|
7天前
|
数据可视化 Linux 数据格式
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
|
7天前
|
Python
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
|
7天前
|
存储 Java Unix
`APScheduler`(Advanced Python Scheduler)是一个轻量级的Python库,用于在应用程序中调度任务。
`APScheduler`(Advanced Python Scheduler)是一个轻量级的Python库,用于在应用程序中调度任务。
|
11天前
|
数据采集 前端开发 测试技术
【Python】已解决:(最新版selenium框架元素定位报错)NameError: name ‘By’ is not defined
【Python】已解决:(最新版selenium框架元素定位报错)NameError: name ‘By’ is not defined
14 0
|
12天前
|
开发者 Python
【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘
【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘
12 0