通过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调用cmd命令行制作刷博器
Jan 13 Python
python写的一个文本编辑器
Jan 23 Python
Python多线程编程(五):死锁的形成
Apr 05 Python
Python语法快速入门指南
Oct 12 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
python生成ppt的方法
Jun 07 Python
python 搜索大文件的实例代码
Jul 08 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
Python使用socket模块实现简单tcp通信
Aug 18 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 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
wordpress之wp-settings.php
2007/08/17 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
网上抓的一个特效
2007/05/11 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python求pi的方法
2014/10/08 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python查看列的唯一值方法
2018/07/17 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
销售职业生涯规划范文
2014/03/14 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript