adb 常用命令封装

from androguard.core.bytecodes.apk import APK
import os

class ADB:

    def __init__(self, log):
        self.log = log

    def get_devices(self) -> list:
        """获取链接的设备"""
        all_devices = []
        cmd = "adb devices"
        reslut = os.popen(cmd).readlines()[1:]
        for item in reslut:
            if item != "\n":
                all_devices.append(str(item).split("\t")[0])
        self.log.info("获取的设备:%s" % str(all_devices))
        return all_devices

    def get_platform_version(self):
        """获取系统版本"""
        return os.popen('adb shell getprop ro.build.version.release').read()

    def get_apkname(self, apk):
        """
        获取apk 的名字
        :param apk: Android apk包路径
        :return:
        """
        a = APK(apk, False, "r")
        self.log.info("获取到的包名: %s" % a.get_package())
        return a.get_package()

    def get_apk_lautc(self, apk):
        """
        获取apk 的主activity
        :param apk: Android apk包路径
        :return:
        """
        a = APK(apk, False, "r")
        self.log.info("获取到的主activity: %s" % a.get_main_activity())
        return a.get_main_activity()

    def installapk(self, paknamepath: str, device: str) -> bool:
        """
        安装apk
        :param paknamepath: apk 包路径
        :param devname:  设备名
        :return:
        """
        cmd = 'adb -s %s install %s' % (device, paknamepath)
        self.log.info("安装信息:%s" % str(os.popen(cmd).read()))
        return True

    def isinstallapk(self, packname: str, device: str) -> bool:
        """
        是否安装apk
        :param packname:
        :param device:
        :return:
        """
        cmd = "adb -s {} shell pm list packages -3".format(device)
        reslut = os.popen(cmd).readlines()
        all_apkname = []
        for i in reslut:
            apkname = str(i).split('\n')[0].split(":")[1]
            all_apkname.append(apkname)
        if packname in all_apkname:
            return True
        return False

    def uninstallapk(self, packname: str, device: str) -> bool:
        """
        卸载app, 如果村长就卸载
        :param packname:  apk 名
        :param devname: 设备名
        :return:
        """
        cmd = "adb -s {} shell pm list packages -3".format(device)
        reslut = os.popen(cmd).readlines()
        all_apkname = []
        for i in reslut:
            apkname = str(i).split('\n')[0].split(":")[1]
            all_apkname.append(apkname)
        if packname in all_apkname:
            cmd = 'adb -s %s uninstall %s ' % (device, packname)
            os.system(cmd)
            return True
        return False

    def push_file(self, file):
        """往手机push文件"""
        cmd = "adb push {} /sdcard".format(file)
        self.log.info("执行push 命令:%s" % cmd)
        try:
            os.popen(cmd).readlines()
            return True
        except Exception as e:
            self.log.error(e)
            return False

    def adb_shell_get(self, file1, file2):
        """
        手机往电脑传送文件
        :param file1: 手机上的文件
        :param file2: 放在电脑上什么地方
        :return:
        """
        cmd = "adb pull {} {}".format(file1, file2)
        self.log.info("执行pull 命令:%s" % cmd)
        try:
            os.popen(cmd).readlines()
            return True
        except Exception as e:
            self.log.error(e)
            return False

    def get_device_frim(self):
        """
        获取手机厂商
        ro.product.manufacturer
        ro.product.vendor.brand
        ro.product.system.brand
        :return:
        """
        info = os.popen("adb shell getprop  ro.product.manufacturer").read()
        self.log.info("get_device_frim %s" % info)
        # 手机厂商不一样,可能获取不到,兼容
        if len(info) == 1:
            info = os.popen("adb shell getprop ro.product.vendor.brand").read()
        return str(info).replace(" ", "").lower()

    def get_device_model(self):
        """
        获取手机型号
        ro.product.odm.marketname
        ro.product.product.marketname
        ro.product.system.marketname
        ro.product.vendor.marketname

        ro.product.vendor.model
        ro.product.model
        :return:
        """

        info = os.popen("adb shell getprop ro.product.model").read()
        if len(info) == 1:
            info = os.popen("adb shell getprop ro.product.system.model").read()
        return str(info).replace(" ", "").lower()

  

posted @ 2021-08-16 11:24  绝世老中医  阅读(262)  评论(0编辑  收藏  举报