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 相关文章推荐
Python使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
python实现滑雪游戏
Feb 22 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
Python OpenCV读取中文路径图像的方法
Jul 02 Python
python使用列表的最佳方案
Aug 12 Python
浅析python连接数据库的重要事项
Feb 22 Python
深度学习小工程练习之垃圾分类详解
Apr 14 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
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
Prototype Selector对象学习
2009/07/23 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
js制作提示框插件
2020/12/24 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python使用selenium实现批量文件下载
2019/03/11 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
高中英语教学反思
2014/02/04 职场文书
婚礼司仪主持词
2014/03/14 职场文书
明信片寄语大全
2014/04/08 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
讲解MySQL增删改操作
2022/05/06 MySQL