《自拍教程56》Python_批量安装卸载1000个apk

接上2篇案例:Python_批量下载1000个apk, Python_批量验证1000个apk

都下载完了, 也验证了下载文件的版本号和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最终能安装成功。

  2. adb shell pm list package -3 可以列出所有已安装的第三方的App的包名。

    何为第三方的App,即非系统自带(built-in)的App,后续自行安装的App都是属于第三方App, 比如以下是自行安装的百度地图,酷狗音乐,非系统App:

  3. 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运行,当然也可以双击运行。

更多更好的原创文章,请访问官方网站:www.zipython.com

自拍教程(自动化测试Python教程,武散人编著)

原文链接:https://www.zipython.com/#/detail?id=eaefc83153e64cadb2f74b90f509de0b

也可关注“武散人”微信订阅号,随时接受文章推送。

原文地址:https://www.cnblogs.com/zipython/p/12669672.html

时间: 2024-08-12 13:08:20

《自拍教程56》Python_批量安装卸载1000个apk的相关文章

批量安装/卸载手机apk--python语言

import osimport time filedir = "D:\\app" def install(): files = os.listdir(filedir) for file in files: text = os.popen("adb install -r D:\\app\\"+ file) print "adb install "+file print text.read() def uninstall(): for package

cmd adb批量安装与卸载

批量安装: SET dir=%~dp0echo dir is: %dir%cd /d %dir%for /R %dir% %%i in (*.apk) do adb install %%i 批量卸载: SET dir=%~dp0echo dir is: %dir%cd /d %dir%for /R %dir% %%i in (*.apk) do adb uninstall %%~ni

Linux系统中Kickstart+HTTP+DHCP+TFTP全自动批量安装部署

说明: Kickstart服务器系统:CentOS 5.10 64位 IP地址:192.168.21.128 需要安装部署的Linux系统:CentOS 5.10 64位 eth0(第一块网卡,用于外网)IP地址段:192.168.21.160-192.168.21.200 eth1(第二块网卡,用于内网)IP地址段:10.0.0.160-10.0.0.200 子网掩码:255.255.255.0 网关:192.168.21.2 DNS:8.8.8.8 8.8.4.4 所有服务器均支持PXE网络

生产环境之CentOS-6.5下KVM利用kickstart批量安装操作系统

KVM 是 kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少.KVM目前已成为学术界的主流VMM之一. KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术).是基于硬件的完全虚拟化.而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化.但Xen本

iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)

这是作者:Tong 写的一篇安装教程 首先感谢:wowpc制作的变色龙安装版.iATKOS作者以及硬盘安装助手作者前言:现在时代在进步,系统同样也在进步,在以前要在PC上整个Mac是很痛苦的事情,就算装好也可能面临驱动上的问题,在经历过这么多坎坷后,在pc上安装mac逐渐走向完美,更所谓比安装windows还要简单,忠心感谢那些为osx86做贡献的朋友.由于没有相机,手机像素低就拍不了相关安装过程,只能截点电脑的截图给大家参考了,新手要参考安装过程的话可以去论坛找以前的相关教程截图参考:一.准备

Cobbler全自动批量安装部署Linux系统

前言:这篇文章是系统运维www.osyunwei.com的作品,我只是根据实践了一下,出于对原作者的尊重附原文链接如下: 原文链接:http://www.osyunwei.com/archives/7606.html 根据文章的说明是可以完成所属功能的,不过原文章有点小问题,在本文中我已经修改过了,仅供大家参考,有问题大家交流,E-mail:[email protected] 安装之前的一点说明 Cobbler服务器系统:CentOS5.10 64位 IP地址:192.168.21.128 需要

kickstart 批量安装Linux系统

Kickstart 批量安装Linux系统 Kickstart的工作原理想必大家都知道了,通过pxe协议同时装配多台服务器.一般用的时候不多,但是要知道,用的时候才能得心应手,我的环境如下: 需要安装部署的Linux服务器: Redhat 6.4 64位 IP地址:192.168.30.34 网卡:p3p1 子网掩码:255.255.255.0 网关:192.168.30.1 DNS:202.106.0.20 或者 8.8.8.8 具体操作: 第一部分:在kickstart服务器系统操作 关闭S

基于RHEL 6.5安装Oracle 11g详细教程(4)——安装Oracle前的准备

4  安装Oracle前的准备 4.1 基本配置 4.1.1 关闭防火墙 [[email protected] ~]# service iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] 关闭iptables开机自启动功能 [[email protect

利用ansible centos7 系统批量安装docker1.12 并添加docker macvlan 网络支持

利用ansible centos7 系统批量安装docker 1.12并添加docker macvlan 网络支持 ansible 目录结构 . ├── hosts ├── roles │   └── docker_client │       ├── defaults │       ├── files │       ├── handlers │       ├── meta │       ├── tasks │       │   └── main.yml # ansible 安装doc