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. 【BZOJ4241】历史研究 分块

    [BZOJ4241]历史研究 Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开 ...

  2. VS2013 自动添加头部注释 -C#开发

    在团队开发中,头部注释是必不可少的.但在开发每次新建一个类都要复制一个注释模块也很不爽,所以得想个办法让开发工具自动生成我们所需要的模板.....操作方法如下: 方法/步骤 1 找你的vs安装目录, ...

  3. 九度OJ 1161:Repeater(复制器) (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1449 解决:508 题目描述: Harmony is indispensible in our daily life and no one ...

  4. maven依赖本地非repository中的jar包【转】

    今天在使用maven编译打包一个web应用的时候,碰到一个问题: 项目在开发是引入了依赖jar包,放在了WEB-INF/lib目录下,并通过buildpath中将web libariary导入. 在e ...

  5. PPID=1 runs as a background process, rather than being under the direct control of an interactive user

    https://en.wikipedia.org/wiki/Daemon_(computing) [后台进程,非互动] d 结尾 syslogd 系统日志记录 sshd 响应ssh连接请求 In mu ...

  6. HDUJ 2052 Picture 模拟

    Picture Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  7. Mac root Operation not permitted

      在mac下sudo 拷贝和删除文件时提醒Operation not permitted. 网上查了一些资料,需要执行 chflags nouchg /path/to/item 命令. 赶紧照做, ...

  8. IDEA tomcat三步实现热部署

    IDEA tomcat三步实现热部署 添加Artifacts选项 添加Artifacts选项,XXXwar 和 XXXwar exploded二选一,若要热部署须选后者. 设置tomcat部署方案 设 ...

  9. 时间序列数据库概览——基于文件(RRD)、K/V数据库(influxDB)、关系型数据库

    一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这类工具附属于监控告警工具,底层没有 ...

  10. VC Q&A (原创)

    Q1:External Dependencies有什么作用? A1:(网友答复:)External   Dependencies是说你没有把这个文件加入到这个工程中,但是需要这个文件的支持.当然有时是 ...