Mac: Python 执行 adb 命令

作者个人网站:http://www.harddone.com

说明

本文以具体的python脚本为例进行说明,两个脚本都是根据开发过程中的业务需求而开发,并不具备通用性。但是其核心代码都是通过python的api执行adb命令:

//example
cmd = 'adb shell' 
os.system(cmd)

uninstall_clean_app.py

#!/usr/bin/python
import subprocess
import os, sys
import getopt

BASE_DIR = os.path.dirname(os.path.dirname(__file__))


if __name__ == '__main__':

    """ change commands and add shell"""

    tag = ''

    try:
        opt, args = getopt.getopt(sys.argv[1:], "ht:", ['pkg', 'help'])
        for op, value in opt:
            if op in ("-t", "--pkg"):
                tag = value
            if op in ("-h", "--help"):
                print "Usage: main_app_clean.py -t APP_PKG_NAME"
                print "Options:"
                print "  -t  APP_PKG_NAME should be a bundle id !"
                print ""
                print "Sample : ./main_app_clean.py -t <bundle id>"
                print ""
                sys.exit()
    except getopt.GetoptError:  
            print "Error: Could not find the args."
            print "Usage: main_app_clean.py -t APP_PKG_NAME"
            print "Options:"
            print "  -t  APP_PKG_NAME should be a bundle id !"
            print ""
            print "Sample : ./main_app_clean.py -t <bundle id>"
            print ""
            sys.exit()

    
    if tag == '':
        print "you should input a bundle id  !"
        exit()
    pkg = tag

    print ''
    print '1) uninstalling ' + pkg +' ...'
    unInstallCmd = 'adb uninstall  ' + pkg 
    os.system(unInstallCmd)

    print ''
    print '2) cleaning the cached file...'
    cleanCmd1 = 'adb shell rm -fR /sdcard/.DataBackupTest'
    os.system(cleanCmd1)
    cleanCmd2 = 'adb shell rm -fR /sdcard/.DataBackup'
    os.system(cleanCmd2)
    print ''
    print ' All done !^_^!'
    print ''

    exit()

根据app bundle id 卸载应用,并且删除该应用在sdcard目录下生成的文件夹等。当前脚本中所删除的目录是写死的,可以根据需要自己修改。

  • 使用方法

    • 下载脚本到指定目录
    • 打开terminal,执行cd命令到脚本所在目录
    • 执行python命令 python ./uninstall_clean_app.py -t com.xxx.app
    01.png

obb_push.py

#!/usr/bin/python
import subprocess
import os, sys
import getopt

BASE_DIR = os.path.dirname(os.path.dirname(__file__))


if __name__ == '__main__':

    """ change commands and add shell"""

    tag = ''

    try:
        opt, args = getopt.getopt(sys.argv[1:], "ht:", ['tag', 'help'])
        for op, value in opt:
            if op in ("-t", "--tag"):
                tag = value
            if op in ("-h", "--help"):
                print "Usage: obb_push.py -t TAG_NAME"
                print "Options:"
                print "  -t  TAG_NAME.Choose what you want to use tag, should be a obb file path !"
                print ""
                print "Sample : ./obb_push.py -t <obb file path>"
                print ""
                sys.exit()
    except getopt.GetoptError:  
            print "Error: Could not find the args."
            print "Usage: obb_push.py -t TAG_NAME"
            print "Options:"
            print "  -t  TAG_NAME.Choose what you want to use tag, should be a obb file path !"
            print ""
            print "Sample : ./obb_push.py -t <obb file path>"
            print ""
            sys.exit()

    
    if tag == '':
        print "you should input a obb file\'s path !"
        exit()

    print '======to get package name=======>'
    obbFilePath = tag
    if obbFilePath == '':
        print 'you should input a obb file\'s path !'
        exit()
    obbSubDirs = obbFilePath.split('/')
    # index  = len(obbSubDirs) - 1
    obbFileName = obbSubDirs[-1]
    print '>>>obbFileName = ' + obbFileName
    if obbFileName == '' or obbFileName.find('.obb') == -1:
        print 'can not find a obb file in the path !'
        exit()
    
    tmpPackageName = obbFileName.split('.')
    print  tmpPackageName
    packageName = ''
    # for com in tmpPackageName[2:-2]:
    #   print com
    #   if com == tmpPackageName[-2]:
    #       packageName += com
    #   else:
    #       packageName += com + "." 
    packageName = '.'.join(tmpPackageName[2:-1])
    print '>>>package name = ' + packageName


    print '=======adb shell mkdir ========>'
    obbDestPath = 'sdcard/Android/obb/' + packageName
    subDir = ''
    subDirs = obbDestPath.split('/')
    for dir in subDirs:
        subDir += '/' + dir
        # print subDir 
        os.system('adb shell mkdir ' + subDir)

    print '=======adb push obb file to device ========>'
    pushCmd = 'adb push ' + obbFilePath.replace(' ','\\ ')+ ' /' + obbDestPath + '/' 
    # print pushCmd
    os.system(pushCmd)

    exit()

该脚本作用是根据传入的obb文件完整路径,解析出app bundle id,然后将obb文件push到android设备上,减少出错机会和烦人的拷贝工作,执行该脚本可有快速完成。

  • 使用方法同上,最后执行命令 python ./obb_push.py -t <obb file path>
02.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,848评论 0 10
  • 文/Bruce.Liu1 1.Python前世今生 1.1.Python历史 Python的创始人: Guido ...
    BruceLiu1阅读 11,885评论 3 119
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,598评论 0 0
  • 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入...
    小小不懂11阅读 3,463评论 2 30
  • 今天是个复杂的日子。昨晚,买的早餐,今早没有完全用上。因为,我不能在5点准时起来!等我觉得时间差不多该起来了,很痛...
    夏a天阅读 423评论 0 0