脚本 批量安装和卸载apk

思路:

1、前提:已连接设备,查询连接设备,cmd输入命令:adb devices

2、批量获取device name,然后过滤

  ①正则表达式过滤:'\n(.+?)\t'

  debug模式下可看到device name是以\n开头、\t结束

  

  ②字符串过滤

3、使用到的adb命令

# 查询已连接设备
adb devices

# 多设备连接时,添加参数-s
adb -s <devices_name>

# 查询是否已安装某个apk
adb -s <devices_name> shell pm list packages | findstr "<package_name>"

# 安装apk
adb -s <devices_name> install <apk路径>

# 卸载apk
adb -s <devices_name> uninstall <package_name>

# 查询包名
adb shell pm list pm list packages -3 # 查询第三方应用
aapt dump badging <apk路径>  # 获取包名

 

4、设备是否已安装apk,已安装则卸载,未安装则安装

后续可优化:1、apk安装路径从网站下载

      2、多进程同步执行命令,可以多设备同时进行

实现代码:

 1 # coding=utf-8
 2 import re
 3 import os
 4 import time
 5 
 6 
 7 def get_devices():
 8     str_init = ' '
 9     # 获取命令adb devices所有打印内容
10     all_info = os.popen('adb devices').readlines()
11     # 过滤打印设备名称
12     for i in range(len(all_info)):
13         str_init += all_info[i]
14     device = re.findall('\n(.+?)\t', str_init, re.S)
15     return device
16
17 
18 def in_uninstall_apk():
19     result = ''
20     file = r'<安装包路径>'
21     for i in get_devices():
22         # 查询是否已安装apk
23         package_list = os.popen('adb -s %s shell pm list packages | findstr "<pacakge_name>"' % i).read()
24         if len(get_devices()) == 0:
25             result = '无可连接设备'
26         # 已安装,则卸载
27         if '<pacakge_name>' in package_list:
28             cmd = 'adb -s %s uninstall <pacakge_name>' % i
29             os.system(cmd)
30             result = f"设备:{'、'.join([str(count) for count in get_devices()])}卸载成功。"
31         else:     # 未安装
32             cmd = 'adb -s %s install %s' % (i, file)
33             os.system(cmd)
34             time.sleep(2)
35             result = f"设备:{'、'.join([str(count) for count in get_devices()])},安装apk:{file}成功。"
36     return result
37 
38 
39 print(in_uninstall_apk())

 

posted @ 2021-06-02 19:09  SpriteGirl  阅读(730)  评论(0)    收藏  举报