在多台手机上批量安装apk
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的更多相关文章
- Android检查手机上是否安装了第三方软件的方法------本文以百度地图为例
package com.example.myapi.thirdbaidumap; import java.net.URISyntaxException; import java.util.ArrayL ...
- Android 检查手机上是否安装了指定的软件(根据包名检测)
Android检查手机上是否安装了指定的软件(根据包名检测) /** * 检查手机上是否安装了指定的软件 * @param context * @param packageName * @return ...
- 在同一台电脑上同时安装Python2和Python3
目前Python的两个版本Python2和Python3同时存在,且这两个版本同时在更新与维护. 到底是选择Python2还是选择Python3,取决于当前要使用的库.框架支持哪个版本. 例如:HTM ...
- Genymotion上不能安装APK软件的问题
Genymotion模拟器不能安装APK的原因 官网给出的解释:Genymotion模拟器使用的是x86架构,在第三方市场上的应用有部分不采用x86这么一种架构,所以在编译的时候不通过,报“APP n ...
- ios-判断手机上是否安装了某个App
方法一 1.获取手机中安装的所有App 1.1.runtime中的方法,所以要导入 #include <objc/runtime.h> 1.2.在 AppDel ...
- 一台电脑上同时安装python2和python3
被python2的编码问题整的快晕了,python3对编码问题解决的不错 所以想安装下python3,但由于目前企业大多还是用python2,所以不想卸载2,让python2和python3共存. 本 ...
- 利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)
MobileCoreService这个系统的库,里面有个私有的类LSApplicationWorkspace ,利用运行时可以获得私有类里面的方法,- (id)allInstalledApplicat ...
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManag ...
- 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决
最近APP出现一个很奇怪的问题,在Android 4.4.2和android 4.4.3系统上点击应用的快捷方式,打不开应用,而且会提示未安装程序. 确认了应用的MainActivity中设置了and ...
随机推荐
- Python 深入剖析SocketServer模块(一)(V2.7.11)
一.简介(翻译) 通用socket server 类 该模块尽力从各种不同的方面定义server: 对于socket-based servers: -- address family: ...
- Til the Cows Come Home(最短路模板题)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description Bessie is ...
- mysql系列之3.mysql进阶
启动原理 mysqld脚本-->mysqld_safe脚本-->mysqld服务-->启动mysql 强制关闭mysql: 三种方法, 不建议用! killall mysqld pk ...
- 【题解】P4799[CEOI2015 Day2]世界冰球锦标赛
[题解][P4799 CEOI2015 Day2]世界冰球锦标赛 发现买票顺序和答案无关,又发现\(n\le40\),又发现从后面往前面买可以通过\(M\)来和从前面往后面买的方案进行联系.可以知道是 ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC1 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件.包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统.提供 C/C+ ...
- 公司IIS 项目公布 注意点
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/sat472291519/article/details/24010721 IIS - 右键 - 属性 ...
- python仪表盘
1.在这里可以看到pyecharts中有定义好的各种图标类. 复制上面代码,会出现“ModuleNotFoundError: No module named 'pyecharts'”. pip ins ...
- Java for LeetCode 097 Interleaving String 【HARD】
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...
- re.sub用法
re.sub功能是对于一个输入的字符串,利用正则表达式,来实现字符串替换处理的功能返回处理后的字符串 re.sub共有五个参数 三个必选参数pattern,repl,string 两个可选参数coun ...
- nodejs 基础篇整合
nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...