使用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~

转载于:https://www.cnblogs.com/zhaoqi3215/p/4999374.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,使用多线程并发安装APK通常会涉及到`threading`模块或者更高级的`concurrent.futures`模块。安装APK通常需要调用外部的命令行工具,比如`adb`(Android Debug Bridge)。这里是一个简单的示例,展示如何使用`threading`模块实现多线程安装: ```python import os import threading from subprocess import call def install_apk(package_path): # 假设adb_install_apk是个执行安装操作的函数或命令行 # adb_install_apk = lambda path: call(['adb', 'install', '-r', path]) adb_install_apk = "adb install -r {}" # 根据实际情况填入adb命令 try: # 使用call()函数执行命令,并捕获可能的异常 result = call(adb_install_apk.format(package_path), shell=True) if result == 0: print(f"Package {package_path} installed successfully.") else: print(f"Failed to install {package_path}. Return code: {result}") except Exception as e: print(f"Error installing {package_path}: {e}") # 安装列表 apk_list = ['path/to/apk1.apk', 'path/to/apk2.apk', 'path/to/apk3.apk'] # 创建线程列表 threads = [threading.Thread(target=install_apk, args=(apk,)) for apk in apk_list] # 启动所有线程 for thread in threads: thread.start() # 等待所有线程完成 for thread in threads: thread.join() ``` 注意: 1. 这个例子假设你已经正确配置了`adb`环境并且可以在命令行中直接使用。 2. `adb_install_apk`的实际实现可能会因环境差异和操作系统不同而有所变化。 3. 在多线程环境下,你还需要处理好锁和线程安全问题,特别是当多个线程尝试同时访问同一资源时。 相关问题: 1. Python中如何处理多线程的同步问题? 2. 如何确保在多线程环境中`adb`命令的正确执行? 3. 如果有网络请求等IO密集型任务,使用多线程是否会更有效率?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值