美文网首页
Android-获取设备内所有包名和对应版本号

Android-获取设备内所有包名和对应版本号

作者: 崔某 | 来源:发表于2021-11-27 11:18 被阅读0次
    运行步骤:连接设备->运行脚本->脚本所在目录会生成对应的CSV文件

    备注:

    1. 无线连接请修改脚本中的adb命令,加入"-s 序列号"即可
    2. 若需要解析不同类型包名,请修改脚本中:all_system_packages_list变量的赋值
      查询所有包名:adb shell pm list packages
      查询三方包名:adb shell pm list packages -3
      查询自带包名:adb shell pm list packages -s
      模糊查询包名:adb shell pm list packages -e "关键字"
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # @Time    : 2021/11/24 15:13
    # @File    : getPackagesVersion.py
    
    """
        根据包名获取版本号
    """
    import os
    import csv
    import time
    
    
    # 生成excel
    def get_csv_writer(file_name, field_names):
        now_time = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time()))
        file_path = f'{os.getcwd()}\\{file_name}_{now_time}.csv'
        mem_csv = open(file_path, 'w', newline='', encoding="GBK")
        writer = csv.DictWriter(mem_csv, fieldnames=field_names)
        writer.writeheader()
        return writer
    
    
    def getAllPackages():
        # 等待手机连接
        print("等待设备连接...")
        os.system("adb wait-for-device")
        print("设备连接成功!")
        # 手机型号
        phoneModel = os.popen("adb shell getprop ro.product.model").read().strip('\n')
        # 拿到writer
        writer = get_csv_writer(file_name=f"{phoneModel}_AllPackages", field_names=["包名", "版本号"])
        # 设备内所有预置应用的包名
        all_system_packages_list = os.popen("adb shell pm list packages -s").read().strip('\n').split("\n")
        # packages_version_dict = {}
        for i in all_system_packages_list:
            # 切片删除"package:",获取完整版本号
            packages_name = i[8:]
            # 获取版本号
            packages_version = \
            os.popen(f'adb shell pm dump {packages_name} | findstr "versionName"').read().strip("\n").split("=")[1]
            print(f"{packages_name}:{packages_version}")
            # packages_version_dict[packages_name] = packages_version
            # 写入CSV
            writer.writerow({"包名": packages_name, "版本号": packages_version})
    
    
    if __name__ == '__main__':
        getAllPackages()
    

    相关文章

      网友评论

          本文标题:Android-获取设备内所有包名和对应版本号

          本文链接:https://www.haomeiwen.com/subject/teifxrtx.html