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以并发方式编写高性能端口扫描器的方法
Jun 14 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python标准库之collections包的使用教程
Apr 27 Python
《与孩子一起学编程》python自测题
May 27 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
python实现连续图文识别
Dec 18 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
利用Python校准本地时间的方法教程
Oct 31 Python
解决Python二维数组赋值问题
Nov 28 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 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下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP输出时间差函数代码
2013/01/28 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
2018/08/16 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
numpy数组拼接简单示例
2017/12/15 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
python画蝴蝶曲线图的实例
2019/11/21 Python
python 写一个性能测试工具(一)
2020/10/24 Python
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
yy婚礼主持词
2014/03/14 职场文书
省文明单位申报材料
2014/05/08 职场文书
身边的榜样活动方案
2014/08/20 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
学校安全管理制度
2015/08/06 职场文书
高一英语教学反思
2016/03/03 职场文书