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实现字符串格式化的方法小结
Feb 20 Python
Python判断变量是否为Json格式的字符串示例
May 03 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
python pandas生成时间列表
Jun 29 Python
Python列表元素常见操作简单示例
Oct 25 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
python字典的值可以修改吗
Jun 29 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图片上传类带图片显示
2006/11/25 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php关联数组快速排序的方法
2015/04/17 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
laravel自定义分页效果
2017/07/23 PHP
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python装饰器深入学习
2018/04/06 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Django 静态文件配置过程详解
2019/07/23 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
pygame实现五子棋游戏
2019/10/29 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
消防器材管理制度
2014/01/28 职场文书
高级编程求职信模板
2014/02/16 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
芙蓉镇观后感
2015/06/10 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python