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 django 访问静态文件出现404或500错误
Jan 20 Python
tensorflow中next_batch的具体使用
Feb 02 Python
对python sklearn one-hot编码详解
Jul 10 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
python变量的存储原理详解
Jul 10 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
python链表类中获取元素实例方法
Feb 23 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
Apr 27 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
JS实现购物车特效
2017/02/02 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
python实现的简单抽奖系统实例
2015/05/22 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
浅谈python标准库--functools.partial
2019/03/13 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
python实现人脸签到系统
2020/04/13 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
应聘自荐书
2013/10/08 职场文书
幼教毕业生自我鉴定
2014/01/12 职场文书
青春演讲稿范文
2014/05/08 职场文书
预防传染病方案
2014/06/14 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
Java实现多线程聊天室
2021/06/26 Java/Android
java项目构建Gradle的使用教程
2022/03/24 Java/Android