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


Posted in Python onDecember 18, 2017

今天跟大家分享一下,如何通过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设备信息的轻量级框架,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python删除列表内容
Aug 04 Python
python中字符串类型json操作的注意事项
May 02 Python
使用python读取txt文件的内容,并删除重复的行数方法
Apr 18 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python实现nao机器人手臂动作控制
Apr 29 Python
PyQt5 多窗口连接实例
Jun 19 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python实现指定ip端口扫描方式
Dec 17 Python
django自带的权限管理Permission用法说明
May 13 Python
python读取xml文件方法解析
Aug 04 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Pillow图像处理库安装及使用
Apr 12 Python
python中列表和元组的区别
Dec 18 #Python
Django REST为文件属性输出完整URL的方法
Dec 18 #Python
Python3计算三角形的面积代码
Dec 18 #Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 #Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 #Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 #Python
django模板语法学习之include示例详解
Dec 17 #Python
You might like
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
javascript  数组排序与对象排序的实例
2017/07/17 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
Pyhton中防止SQL注入的方法
2015/02/05 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
一套Delphi的笔试题二
2013/05/11 面试题
社区党员先进事迹
2014/01/22 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
电子商务专业自荐信
2014/06/02 职场文书
学校办公室主任岗位职责
2015/04/01 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
2015公司年度工作总结
2015/05/14 职场文书
雨雪天气温馨提示
2015/07/15 职场文书