通过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 urlopen()函数 示例分享
Jun 12 Python
Python读取图片属性信息的实现方法
Sep 11 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python字符串拼接的几种方法整理
Aug 02 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
python的exec、eval使用分析
Dec 11 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
python 求定积分和不定积分示例
Nov 20 Python
Python class的继承方法代码实例
Feb 14 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
OpenCV全景图像拼接的实现示例
Jun 05 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
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
了解重排与重绘
2019/05/29 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
python实现微信自动回复机器人功能
2019/07/11 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
客房主管岗位职责
2013/12/09 职场文书
宿舍打麻将检讨书
2014/01/24 职场文书
教师师德反思材料
2014/02/15 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
公司经营目标责任书
2015/01/29 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
入队仪式主持词
2015/07/04 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技