1.手机要打开adb调试

2.该程序可以实现台android手机的多个apk批量安装

1.getSeriaoNum.py模块,该模块获取已连接手机的序列号

import os
import threading
import time
import adbModule
import getSeriaoNum class InstallApk(threading.Thread):
def __init__(self):
threading.Thread.__init__(self) def run(self):
arrayDev = []
arrayApkPackage = [r'C:\Users\liangraorao\Desktop\apk\iBiliPlayer-bili.apk']
while True:
udid_list = getSeriaoNum.get_devices()
for udid in udid_list:
if udid in arrayDev:
continue
adbModule.InstallApk(udid, arrayApkPackage).start()
arrayDev.append(udid)
if len(arrayDev) > 10:
arrayDev.clear() #需要安装的手机数量==已经安装的手机数量,结束循环
num = len(getSeriaoNum.get_devices()) if len(arrayDev) == num:
break
time.sleep(10) InstallApk().start()

结果就是:['1713d0b20204', '192.168.1.101:5555']

2.adbModule.py 封装安装和卸载的adb命令

 import threading
import os
"""
arrayApkPackage: 要安装的apk列表
arrayPackageName:要卸载的apk包名
""" class InstallApk(threading.Thread):
def __init__(self, udid, arrayApkPackage):
threading.Thread.__init__(self)
self.udid = udid
self.arrayApkPackage = arrayApkPackage def run(self):
for apkPackage in self.arrayApkPackage:
os.popen('adb -s' + self.udid + ' install -r '+apkPackage) class UnstallApk(threading.Thread):
def __init__(self, udid, arrayPackageName):
threading.Thread.__init__(self)
self.udid = udid
self.arrayPackageName = arrayPackageName def run(self):
for packageName in self.arrayPackageName:
os.popen('adb -s'+ self.udid +' uninstall '+packageName)

3.ExeInstall.py 批量安装apk模块

 import os
import threading
import time
import adbModule
import getSeriaoNum class InstallApk(threading.Thread):
def __init__(self):
threading.Thread.__init__(self) def run(self):
arrayDev = []
arrayApkPackage = [r'C:\Users\admin\Desktop\apk\iBiliPlayer-bili.apk']
while True:
udid_list = getSeriaoNum.get_devices()
for udid in udid_list:
if udid in arrayDev:
continue
adbModule.InstallApk(udid, arrayApkPackage).start()
arrayDev.append(udid)
if len(arrayDev) > 10:
arrayDev.clear() #需要安装的手机数量==已经安装的手机数量,结束循环
num = len(getSeriaoNum.get_devices()) if len(arrayDev) == num:
break
time.sleep(10) InstallApk().start()

4.ExeUninstall.py 批量卸载apk

 import threading
import os
import getSeriaoNum
import adbModule class UnintallApk(threading.Thread):
def __init__(self):
threading.Thread.__init__(self) def run(self):
arrayDev = []
arrayPackageName = ['tv.danmaku.bili']
while True:
udid_list = getSeriaoNum.get_devices()
for udid in udid_list:
if udid in arrayDev:
continue
adbModule.UnstallApk(udid, arrayPackageName).start()
arrayDev.append(udid)
if len(arrayDev) > 10:
arrayDev.clear() #需要安装的手机数量==已经安装的手机数量,结束循环
num = len(getSeriaoNum.get_devices()) if len(arrayDev) == num:
break
time.sleep(10) UnintallApk().start()

在多台手机上批量安装apk的更多相关文章

  1. Android检查手机上是否安装了第三方软件的方法------本文以百度地图为例

    package com.example.myapi.thirdbaidumap; import java.net.URISyntaxException; import java.util.ArrayL ...

  2. Android 检查手机上是否安装了指定的软件(根据包名检测)

    Android检查手机上是否安装了指定的软件(根据包名检测) /** * 检查手机上是否安装了指定的软件 * @param context * @param packageName * @return ...

  3. 在同一台电脑上同时安装Python2和Python3

    目前Python的两个版本Python2和Python3同时存在,且这两个版本同时在更新与维护. 到底是选择Python2还是选择Python3,取决于当前要使用的库.框架支持哪个版本. 例如:HTM ...

  4. Genymotion上不能安装APK软件的问题

    Genymotion模拟器不能安装APK的原因 官网给出的解释:Genymotion模拟器使用的是x86架构,在第三方市场上的应用有部分不采用x86这么一种架构,所以在编译的时候不通过,报“APP n ...

  5. ios-判断手机上是否安装了某个App

    方法一     1.获取手机中安装的所有App   1.1.runtime中的方法,所以要导入       #include <objc/runtime.h>   1.2.在 AppDel ...

  6. 一台电脑上同时安装python2和python3

    被python2的编码问题整的快晕了,python3对编码问题解决的不错 所以想安装下python3,但由于目前企业大多还是用python2,所以不想卸载2,让python2和python3共存. 本 ...

  7. 利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)

    MobileCoreService这个系统的库,里面有个私有的类LSApplicationWorkspace ,利用运行时可以获得私有类里面的方法,- (id)allInstalledApplicat ...

  8. 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManag ...

  9. 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决

    最近APP出现一个很奇怪的问题,在Android 4.4.2和android 4.4.3系统上点击应用的快捷方式,打不开应用,而且会提示未安装程序. 确认了应用的MainActivity中设置了and ...

随机推荐

  1. Python --- Scrapy 命令(转)

    Scrapy 命令 分为两种: 全局命令 和 项目命令 . 全局命令:在哪里都能使用. 项目命令:必须在爬虫项目里面才能使用. 全局命令 C:\Users\AOBO>scrapy -h Scra ...

  2. 线程(while 和 if 剖析)

    那存钱取钱为例: 要求实现一次存一次取的操作 不可出现连续存或连续取: 如果只有存钱和取钱各自只有一个线程在操作使用 if 的话可以满足要求: package com.thread; /** * 模拟 ...

  3. 操作符表示指针指向的底层值 切片 nill 清空 按值引用赋值 获取地址赋值

    package main import "fmt" var thisVisitedUrls [] string func tf() { p := &thisVisitedU ...

  4. Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

    Dominant Resource Fairness: Fair Allocation of Multiple Resource Types

  5. yun 安装mysql

    1.安装客户端和服务器端 确认mysql是否已安装: yum list installed mysql* rpm -qa | grep mysql* 查看是否有安装包:   yum list mysq ...

  6. 基于springboot的RestTemplate、okhttp和HttpClient对比

    1.HttpClient:代码复杂,还得操心资源回收等.代码很复杂,冗余代码多,不建议直接使用. 2.RestTemplate: 是 Spring 提供的用于访问Rest服务的客户端, RestTem ...

  7. POJ2104 K-th Number —— 静态区间第k小

    题目链接:http://poj.org/problem?id=2104 K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Sub ...

  8. JAVA- 成员变量与局部变量的区别

    成员变量与局部变量的区别 成员变量是定义在方法之外,类之内的局部变量是定义在方法之内的. 作用上的区别: 1.成员变量的作用是用于描述一类事物的公共属性的. 2.局部变量的作用就是提供一个变量给方法内 ...

  9. openfire调试环境

    导入工程: File->New->project: 选择“Java project from existing ant buildfile” 再从菜单windows->show vi ...

  10. 开机时遇到grub rescue无法进入系统的解决方法

    装双系统(win10和elementary os),elementary os是ubuntu的一个分支.在win10中合并了一块空白磁盘分区,再开机的时候出问题了. 遇到filesystem unkn ...