#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import sys
# 脚本用来进行adb 批量push文件,并预置So库,逻辑为按照push脚本所在目录中list文件进行相应的apk下载。脚本所在目录应包含list(各个包)和so库文件夹
# reload(sys)
# sys.setdefaultencoding('utf8')
# adb连接指令
print u"等待设备连接"
popen = os.popen("adb wait-for-device")
print popen.read()
print u"设备已连接"
os.popen("adb root")
os.popen("adb wait-for-device")
os.popen("adb remount")
os.popen("adb wait-for-device")
# 获得当前目录文件及文件夹
cwdpath = os.listdir(os.getcwd())
# print "flag:%s"%cwdpath
#获得.py文件所在目录路径
pypath = os.path.split(os.path.realpath(__file__))[0]
# 安装单个apk
oneapk = raw_input(unicode("输入123456进行默认操作!安装单个apk文件,请直接输入包含'.apk'的文件名并回车:", "utf-8").encode('gbk'))
# 进行包含".apk"文件名的单个apk安装,并预置so库
if ".apk" in oneapk:
print oneapk
print "removing %s" % oneapk
try:
rmoneapk = os.popen("adb shell rm /system/priv-app/%s" % oneapk)
# print rmoneapk.read()
except:
print u"此apk不存在"
finally:
instapk = os.popen("adb push %s /system/priv-app" % oneapk)
print u"%s push 完毕" % oneapk
# 获得当前目录的绝对路径
#filepath = os.path.abspath(os.getcwd())
# 打开路径下的so文件夹,预置so库
so_path = pypath + '\so'
# 列出so文件夹下文件
lis_so = os.listdir(so_path)
# print lis_so
# 获得so文件夹的绝对路径
so_abspath = os.path.abspath(so_path)
# 打开so文件夹
os.chdir(so_abspath)
# 输出so文件夹绝对路径
print so_abspath
print u"预置so库"
for c in lis_so:
print c
print "pushing so/%s to /system/lib/" % c
with open(c, 'r') as e:
pushso = os.popen("adb push %s /system/lib/%s" % (c, c))
print pushso.read()
os.popen("adb shell chmod 644 /system/lib/%s" % c)
print u"预置so库完毕"
# 默认操作
else:
# 获得当前目录的绝对路径
filepath = os.path.abspath(os.getcwd())
pypath = os.path.split(os.path.realpath(__file__))[0]
# 打开路径下的so文件夹,预置so库
so_path = pypath + '\so'
# 列出so文件夹下文件
lis_so = os.listdir(so_path)
# print lis_so
# 获得so文件夹的绝对路径
so_abspath = os.path.abspath(so_path)
# 打开so文件夹
os.chdir(so_abspath)
# 输出so文件夹绝对路径
print so_abspath
print u"预置so库"
for c in lis_so:
print c
print "pushing so/%s to /system/lib/" % c
with open(c, 'r') as e:
pushso = os.popen("adb push %s /system/lib/%s" % (c, c))
print pushso.read()
os.popen("adb shell chmod 644 /system/lib/%s" % c)
print u"预置so库完毕"
# 删除旧的apk
# 回到apk所在目录
os.chdir(pypath)
# print 'tag:%s' %filepath
with open(pypath + '\list.txt', 'r') as f:
for l in f.readlines():
print "uninstalling %s" % l
uninst = os.popen("adb shell pm uninstall %s" % l)
print uninst.read()
# 遍历list,按list中包名记性删除apk
with open(pypath + '\list.txt', 'r') as f:
print u"check并删除旧的APK"
for l2 in f.readlines():
print "checking %s" % l2
try:
package = os.popen("adb shell pm path %s" % l2).read().encode().replace("\r\n", "")
packagestr = package.split(":")[1]
print packagestr
print "removing %s" % packagestr
rmapk = os.popen("adb shell rm %s" % packagestr)
print rmapk.read()
except:
print "Failure"
# 安装APK
cwdpath1 = os.listdir(os.getcwd())
for apk in cwdpath1:
if os.path.isfile(apk) and os.path.splitext(apk)[1] == '.apk':
instapk = os.popen("adb push %s /system/priv-app" % apk)
print instapk.read()
print u"%s push 完毕" % apk
os.popen("adb reboot")
print u"预置应用完毕,等待重启"
os.popen("adb wait-for-device")
print u"重启完毕,好运"
os.system("pause")
批量安装当前目录下的apk文件
最新推荐文章于 2025-06-15 15:34:26 发布