• 使用bat脚本调用py文件直接获取应用的包名和targetversion


    背景:

    在上一篇已经介绍过如何利用python调用aapt获取包名

    https://www.cnblogs.com/reseelei-despair/p/11078750.html

    但是因为每次都要修改py文件内的安装包所在路径,感觉不是很方便,所以想办法用bat脚本实现直接将文件拖入bat文件直接运行获取到相关信息

    思路:

    批处理脚本直接运行py文件,修改py文件,导入sys模块,直接在cmd中将安装包路径传入py后运行

    代码:

    bat脚本代码如下

    @echo off
    COLOR 2
    set "getname=%1"
    echo %getname%
    python D:Pyexericeaapt_badging.py %getname%
    pause

    使用方法:创建一个txt文件,代码复制进去,保存后退出,将文件后缀名修改成bat即可

    python代码修改部分

    # -*- coding: utf-8 -*-
    import re
    import subprocess
    import os
    import sys#导入sys模块
    class ApkInfo:
        def __init__(self, apk_path):
            self.apkPath = apk_path
            self.aapt_path = self.get_aapt()
    
        @staticmethod
        def get_aapt():
            if "ANDROID_HOME" in os.environ:
                root_dir = os.path.join(os.environ["ANDROID_HOME"], "build-tools")
                for path, subdir, files in os.walk(root_dir):
                    if "aapt.exe" in files:
                        return os.path.join(path, "aapt.exe")
            else:
                return "ANDROID_HOME not exist"
    
        def get_apk_base_info(self):
            p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 stdin=subprocess.PIPE, shell=True)
            (output, err) = p.communicate()
            match = re.compile("package: name='(S+)'").match(output.decode())
            if not match:
                raise Exception("can't get packageinfo")
            package_name = match.group(1)
            return package_name
    
        def get_apk_activity(self):
            p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 stdin=subprocess.PIPE, shell=True)
            (output, err) = p.communicate()
            match = re.compile("launchable-activity: name='(S+)'").search(output.decode())
            if match is not None:
                return match.group(1)
    
        def get_apk_sdkVersion(self):
            p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 stdin=subprocess.PIPE, shell=True)
            (output, err) = p.communicate()
            match = re.compile("sdkVersion:'(S+)'").search(output.decode())
            return match.group(1)
    
        def get_apk_targetSdkVersion(self):
            p = subprocess.Popen(self.aapt_path + " dump badging %s" % self.apkPath, stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 stdin=subprocess.PIPE, shell=True)
            (output, err) = p.communicate()
            match = re.compile("targetSdkVersion:'(S+)'").search(output.decode())
            return match.group(1)
    
    if __name__ == '__main__':
        apk_info = ApkInfo(sys.argv[1])#直接将cmd中给的参数引用至此
        print("Activity:%s"%apk_info.get_apk_activity())
        print("apkName:%s"%apk_info.get_apk_base_info())
        print("sdkVersion:%s"%apk_info.get_apk_sdkVersion())
        print("targetSdkVersion:%s"%apk_info.get_apk_targetSdkVersion())

    效果:

    将文件拖入

    运行结果如下

  • 相关阅读:
    2020杭电HDU-6756多校第一场Finding a MEX(图的分块)
    2020杭电HDU-6768多校第二场Lead of Wisdom(暴力DFS)
    牛客-Matrix(二维Hash-矩阵匹配)
    牛客-白兔的字符串(Hash+二分)
    2020杭电HDU-6768多校第二场The Oculus(假斐波那契数列真Hash)
    2020杭电HDU-6767多校第二场New Equipments(三分+费用流)
    使用 xmllint 验证 odoo xml文件
    odoo 的时差 坑
    请问如何突破”所选文件超出了文件的最大值设定:25.00 Mb“限制
    仓库打包作业超出分拣单数量时,发警报邮件
  • 原文地址:https://www.cnblogs.com/reseelei-despair/p/11082060.html
Copyright © 2020-2023  润新知