批量安装当前目录下的apk文件

本文介绍如何利用Python脚本自动化安装当前目录下的所有APK应用,适用于开发者进行快速测试或部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/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")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值