在多台手机上批量安装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 ...
随机推荐
- AWK命令使用
前言 文本处理三剑客中,grep强在文本查找,sed强在文本处理,现awk强在文本查找后的输出处理.awk可以在处理文本的过程中使用编程结构(变量.条件判断.循环)以及其内置的变量,这就是它强大的地方 ...
- Nested Classes
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html package priceton; /* * Copyright (c) ...
- ceph pool 管理
创建池 [root@node1 ~]# ceph osd pool create monitor pool 'monitor' created 查看池 [root@node1 ~]# ceph osd ...
- 通过JMX获取weblogic的监控指标
通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息.主要用到weblogic自己的t3协议,所以要用到weblogic的jar包:wlfullcl ...
- 在pycharm中执行脚本没有报错但输出显示Redirection is not supported.
没有新式语法错误,但是输出显示Redirection is not supported.(不支持重定向) 在stockflow中找到是因为从IDE中运行脚本的原因,比如pycharm,所有IDE都提供 ...
- 爬虫之重要的requests模块
一 . requests模块 什么是requests模块 requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半 ...
- css3立体旋转菜单
css3立体旋转菜单,css3,3D,立体旋转,立体菜单,菜单导航,css3立体旋转菜单是一款纯css3实现的三维立体旋转导航菜单. 源码下载页:http://www.huiyi8.com/sc/71 ...
- Android Studio 代码混淆(你真的会混淆吗)
一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android S ...
- Custom Database Integration Guide
Introduction This document provides instructions for integrating Openfire authentication, users, and ...
- 如何将 Python 程序打包成 .exe 文件?
有不少订阅本公众号的朋友都不是玩 Python,甚至都不是计算机相关专业的,当我给他们一个 Python 程序时,他们是完全不知道该怎么运行的. 于是我想是不是可以将我的程序打包成可执行文件,直接运行 ...