Python批量安装卸载1000个apk的方法


Posted in Python onApril 10, 2020

都下载完了, 也验证了下载文件的版本号和MD5后,就要开始批量安装了,

然后开始尝试运行打开这个app, 做最基本的功能检点,最后就要考虑卸载App了。

本篇内容主要介绍如何用Python来批量实现安装apk,卸载apk。

备注:

一个手机不可能同时安装1000个apk,需要考虑每50-100个作为一组,进行安装,验证后卸载测试。

准备阶段

1.adb install -d -r XXX.apk 是安装apk的具体命令,

-d :downgrade的简称,编码出现提示说系统里已经有该app且其版本比当前安装的版本更高,即允许低版本的apk安装
-r : reinstall的简称,避免出现提示说这个app已经在系统里了而导致本次安装失败,即允许重装apk
综上:加了-d, -r就会更保险,确保apk最终能安装成功。
adb shell pm list package -3 可以列出所有已安装的第三方的App的包名。
何为第三方的App,即非系统自带(built-in)的App,后续自行安装的App都是属于第三方App, 比如以下是自行安装的百度地图,酷狗音乐,非系统App:

Python批量安装卸载1000个apk的方法 

2.adb shell pm uninstall + App包名, 可以卸载指定的包名的App。

Python批处理脚本形式

记住批处理脚本的精髓:批量顺序执行语句,

以下是“安装apk”脚本形式:

# coding=utf-8
import os
# 读取downloaded_apk文件夹下的所有App文件,进行批量安装
curpath = os.getcwd()
apk_dir = os.path.join(curpath, "downloaded_apk")
apk_list = os.listdir(apk_dir)
for apk in apk_list:
 print("正在安装%s..." % apk)
 apk_path = os.path.join(apk_dir, apk)
 os.system("adb install -d -r %s" % apk_path)
print("所有App已经安装完毕!...")
os.system("pause")

以下是“卸载apk”脚本形式:

# coding=utf-8
import os
# 读取第三方App列表并进行卸载
s = os.popen("adb shell pm list package -3").read()
for line in s.splitlines():
 if len(line) > 2:
  appname = line.replace("package:", "")
  print("正在卸载包名为%s的App" % appname)
  os.system("adb shell pm uninstall %s" % appname)
print("所有App已经卸载完毕!...")
os.system("pause")

Python面向过程函数形式

其实这个案例批处理形式的脚本实现即可,

如果硬要用面向过程函数形式,也是可以考虑简单的把代码块预计封装下即可。

以下是“安装apk”函数形式:

# coding=utf-8
import os

def install_apk():
 '''读取downloaded_apk文件夹下的所有App文件,进行批量安装'''
 curpath = os.getcwd()
 apk_dir = os.path.join(curpath, "downloaded_apk")
 apk_list = os.listdir(apk_dir)
 for apk in apk_list:
  print("正在安装%s..." % apk)
  apk_path = os.path.join(apk_dir, apk)
  os.system("adb install -d -r %s" % apk_path)
 print("所有App已经安装完毕!...")

install_apk()
os.system("pause")

以下是“卸载apk”函数形式:

# coding=utf-8
import os

def uninstall_apk():
 '''读取第三方App列表并进行卸载'''
 s = os.popen("adb shell pm list package -3").read()
 for line in s.splitlines():
  if len(line) > 2:
   appname = line.replace("package:", "")
   print("正在卸载包名为%s的App" % appname)
   os.system("adb shell pm uninstall %s" % appname)
 print("所有App已经卸载完毕!...")

uninstall_apk()
os.system("pause")

Python面向对象类形式

其实这个案例批处理形式的脚本实现即可,

如果硬要用面向对象类形式,也是可以考虑简单地用以下类来实现。

本次优化,class 类名(object): 后续尽量加上object, 代表是父类,

类其最基本特征就是:继承, 默认如果我们不知道当前类的父类是啥,

就直接用object, 代表是一切类的父类, 如果知道其父类啥,这类就要换成具体的父类类名了。

以下是“安装apk”类形式:

# coding=utf-8
import os
class ApkInstaller(object):
 '''用于安装apk'''
 def __init__(self):
  pass
 def install_apk(self):
  '''读取downloaded_apk文件夹下的所有App文件,进行批量安装'''
  curpath = os.getcwd()
  apk_dir = os.path.join(curpath, "downloaded_apk")
  apk_list = os.listdir(apk_dir)
  for apk in apk_list:
   print("正在安装%s..." % apk)
   apk_path = os.path.join(apk_dir, apk)
   os.system("adb install -d -r %s" % apk_path)
  print("所有App已经安装完毕!...")
if __name__ == '__main__':
 a_obj = ApkInstaller()
 a_obj.install_apk()
 os.system("pause")

以下是“卸载apk”类形式:

# coding=utf-8
import os

class ApkUnstaller(object):
  '''用于卸载App'''
  def __init__(self):
    pass
  def uninstall_apk(self):
    '''读取第三方App列表并进行卸载'''
    s = os.popen("adb shell pm list package -3").read()
    for line in s.splitlines():
      if len(line) > 2:
        appname = line.replace("package:", "")
        print("正在卸载包名为%s的App" % appname)
        os.system("adb shell pm uninstall %s" % appname)
    print("所有App已经卸载完毕!...")

if __name__ == '__main__':
  a_obj = ApkUnstaller()
  a_obj.uninstall_apk()
  os.system("pause")

运行方式

确保Android设备通过USB线与电脑连接了,adb设备有效连接,

以上代码的3种实现形式都可以直接运行,

比如保存为install_app.py, uninstall_app.py并放在桌面,

建议python install_app.py, python uninstall_app.py运行,当然也可以双击运行。

总结

到此这篇关于Python批量安装卸载1000个apk的文章就介绍到这了,更多相关Python批量安装卸载apk内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
bat和python批量重命名文件的实现代码
May 19 Python
Python缩进和冒号详解
Jun 01 Python
简单了解Django模板的使用
Dec 20 Python
Python通用循环的构造方法实例分析
Dec 19 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
python实现大量图片重命名
Mar 23 Python
在python3中实现更新界面
Feb 21 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 #Python
Selenium常见异常解析及解决方案示范
Apr 10 #Python
pandas分组聚合详解
Apr 10 #Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 #Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 #Python
Selenium基于PIL实现拼接滚动截图
Apr 10 #Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 #Python
You might like
解析php如何将日志写进syslog
2013/06/28 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
php实现算术验证码功能
2018/12/05 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
下载给定网页上图片的方法
2014/02/18 Python
Scrapy的简单使用教程
2017/10/24 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
感恩节红领巾广播稿
2014/02/11 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
python垃圾回收机制原理分析
2022/04/13 Python