使用python批量给设备安装apk

今天写了一个利用python自动批量给设备安装apk的脚本,具体实现过程如下:

1.首先需要从xml文件中读取相关apk的信息:

xml文件结构定义如下:

<?xml version="1.0"?>
<data>
    <apks>
        <apk id=‘0001‘>test01.apk
        </apk>
        <apk id=‘0002‘>test02.apk
        </apk>
    </apks>
</data>

使用ElementTree解析xml文件的节点,其中apk.text的描述是我们需要安装的apk的name,先存到一个list中;

import xml.etree.ElementTree as ET 
 
tree = ET.parse(‘ApkList.xml‘)
root = tree.getroot()
appList= []
for apk in root.iter(‘apk‘):
    print apk.tag, apk.attrib, apk.text
    appList.append(apk.text)
print "====app list====" 
print appList 
=====================================================================================
Result:
apk {‘id‘: ‘0001‘} test01.apk
apk {‘id‘: ‘0002‘} test02.apk

2.在获取到apk List的基础上,我们需要知道连接到这个电脑的Android设备信息,这里使用的genymotoin的虚拟机,如果真机或者Google的emulator,显示的参数会略有不同:

使用adb devices的command命令去获取参数,并在获取的结果基础上,稍加修正,得到最后的Devices List

cmd = r‘adb devices‘
devList = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
devices = []
for line in devList.stdout.readlines()[1:]:
    if ‘List‘ not in line:
        devices.append((line.split(‘\t‘))[0])
devices.pop()
print "===devices==="
print devices
=====================================================================================
Result:

===devices===
[‘192.168.56.101:5555‘]

3.已经获取到了相关的apk list和device list,下一步需要进行安装的步骤,使用adb的install相比较push要简单方便一点:

print "===install apk==="
for dev in devices:
    for apk in appList:
        installCmd = r‘adb -s %s install -r .\%s ‘ % (dev, apk)
        print installCmd
        result = subprocess.Popen(installCmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        print(result.stdout.readlines())
====================================================================================
Result:

===install apk===
adb -s 192.168.56.101:5555 install -r .\test01.apk
        
[‘\tpkg: /data/local/tmp/test01.apk\r\r\n‘, ‘Success\r\r\n‘]
adb -s 192.168.56.101:5555 install -r .\test02.apk
        
[‘\tpkg: /data/local/tmp/test02.apk\r\r\n‘, ‘Success\r\r\n‘]

使用了两个循环来完成设备和apk params的输入,并在结果中发现”Success”的关键字~安装Okay~

4.最后为了查看安装的结果,使用logging模块去获取其中的安装步骤,将print的代码部分改成logging

import logging
logging.basicConfig(level=logging.DEBUG,
                format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
                datefmt=‘%a, %d %b %Y %H:%M:%S‘,
                filename=‘installer.log‘,
                filemode=‘w‘)
logging.info("start to install apk")
 
===================================================================================
Result:
Thu, 26 Nov 2015 23:23:48 InstallApk.py[line:10] INFO start to install apk

总结:python中logging模块确实强大+易用~,明天详解研究一下logging的原理和api~

时间: 2024-10-17 00:33:11

使用python批量给设备安装apk的相关文章

Python批量修改文件格式

工作中遇到要把多个apk格式文件改成zip包格式,这是一个繁琐的步骤.利用Python脚本并自定义右键运行.py文件给工作带来很大的方便,下面做一个简单的介绍: 前置条件: 要修改的apk包名称:XXXX_CN.apk: 修改后的zip包名称:CN.zip: 操作前把批量修改的apk文件放到同一个文件夹,且把下面写好的.py脚本文件也放到里面去. Python代码: import os                          #导入os系统命令格式 format='zip'      

python批量执行paramiko

puppet 分发软件  同步文件 ssh-批量执行-paramiko-比较好的模块 直接修改远端主机的host文件 python批量执行paramiko,布布扣,bubuko.com

Python批量修改一个目录文件名

#!/usr/bin/env python # -*- coding:utf-8 -*- import re  import os import time # str.split(string) 分割字符串 # '连接符'.join(list) 将列表组成字符串 def change_name(path): global i if not os.path.isdir(path) and not os.path.isfile(path): return False if os.path.isfil

Python批量处理CSV文件

#encoding: utf-8 __author__ = 'DELL' import csv import glob import datetime import sys import os reload(sys) #中文错误 sys.setdefaultencoding( "utf-8" ) ''' @author likehua CSV批处理 ''' class BatchProcessCSV: def __init__(self,inputfolder="c:\\in

python批量修改SecureCRT会话密码

#利用python批量修改SecureCRT 会话密码 # -*- coding:utf-8 -*- import os,re def CRT_Path(path,*args,**kwargs):     for (dirpath, dirnames, filenames) in os.walk(path):         for file in filenames:             fullname = os.path.join(dirpath, file)             

python批量改动指定文件夹文件名称

这小样例仅仅要是说明用python怎么批量改动指定文件夹的文件名称: 记得要把脚本跟改动的文件放在同一个文件夹下 #encoding:utf-8 import os import sys files = os.listdir('D:\\1') #路径能够自己 for name in files: a = os.path.splitext(name) if a[1] == '.txt': #txt能够自己手动改动成你想改的文件名称 newname = a[0]+'.py' #.py也是能够改动 p

python批量同步web服务器代码核心程序

#!/usr/bin/env python #coding:utf8 import os,sys import md5,tab from mysql_co.my_db import set_mysql from ssh_co.ssh_connect import sshd from ssh_co.cfg.config import ssh_message,item_path from file import findfile def my_mysql(): db_file={} my_conne

python批量修改服务器密码,同时保存execl表格

#!/usr/bin/env python #coding:utf8 #随机生成自定义长度密码 from random import choice import string,pickle def GenPassword(length=8,chars=string.ascii_letters+string.digits): return ''.join([choice(chars) for i in range(length)]) def passlist(r_user,c_user,ip_li

python批量修改指定目录文件名

这小例子只要是说明用python怎么批量修改指定目录的文件名: 记得要把脚本跟修改的文件放在同一个目录下 #encoding:utf-8 import os import sys files = os.listdir('D:\\1') #路径可以自己 for name in files: a = os.path.splitext(name) if a[1] == '.txt': #txt可以自己手动修改成你想改的文件名 newname = a[0]+'.py' #.py也是可以修改 print