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 classmethod方法 和 staticmethod

    classmethod() 是一个类方法,用来装饰对应的函数.被classmethod 装饰之后就无需实例化,也不需要在函数中传self,但是被装饰的函数第一个参数需要是cls来表示自身类.可以用来调 ...

  2. C#中GroupBox控件的使用(转)

    GroupBox(框架)控件是C#中用来组织其他控件形成一个控件组,它的使用方法为[工具箱]->[所有Windows窗体](或者是[容器]列表中)->[GroupBox],拖拽到窗体界面中 ...

  3. 九度OJ 1042:Coincidence(公共子序列) (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2303 解决:1241 题目描述: Find a longest common subsequence of two strings. 输入 ...

  4. restlet验证

    1 restlet有无认证对比 无认证: 客户端发起请求 -----> 服务器路由 -----> 访问服务端资源 有认证: 客户端发起请求 -----> 认证 ----->服务 ...

  5. a positive definite matrix

    https://en.wikipedia.org/wiki/Definite_quadratic_form https://www.math.utah.edu/~zwick/Classes/Fall2 ...

  6. 我的Android进阶之旅------>真正在公司看几天代码的感触

    仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...

  7. ul和li 基本用法分析(这里主要想学习怎么用在导航栏中)

    常用作:导航,少量数据表格,居中 一.做导航,居中 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  8. Chart.js 动态图表的使用

    一.相关资料 1. 简介 Chart.js 是一个基于 HTML5 的简单的面向对象的图表库,支持包括 IE7/8 和所有现代浏览器.支持六种图标:曲线图(Linecharts).柱状图(Barcha ...

  9. Java7、Java8 安装卸载问题

    win7 系统,同时安装了JDK7和JDK8,卸载了JDK8之后,cmd命令行输入:java -version ,本以为显示java版本1.7,结果弹错:has value '1.7',but '1. ...

  10. idea生成可执行jar

    1.创建工程 ①使用idea新建一个maven工程. ②编辑工具逻辑代码 ③完成代码的编写后添加工具调用的main方法以接收参数 至此代码编辑过程已经基本完成 ④在maven管理依赖的时候使用idea ...