通过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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
将Python代码打包为jar软件的简单方法
Aug 04 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
Python实现端口检测的方法
Jul 24 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
Python安装tar.gz格式文件方法详解
Jan 19 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
Python中关于logging模块的学习笔记
Jun 03 Python
Python实现简单的猜单词小游戏
Oct 28 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
Jan 06 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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 shell命令合并图片的代码
2011/06/23 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
php jsonp单引号转义
2014/11/23 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
解决Jquery鼠标经过不停滑动的问题
2014/03/03 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
Highcharts入门之简介
2016/08/02 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
详解Python中dict与set的使用
2015/08/10 Python
python:socket传输大文件示例
2017/01/18 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
对Python定时任务的启动和停止方法详解
2019/02/19 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
护理学专业推荐信
2013/12/03 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
全运会口号
2014/06/20 职场文书
建筑安全生产责任书
2014/07/22 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
营销计划书
2015/01/17 职场文书
起诉状范本
2015/05/20 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
css3 文字断裂效果
2022/04/22 HTML / CSS