Android-获取设备内所有包名和对应版本号
2021-11-27 本文已影响0人
崔某
运行步骤:连接设备->运行脚本->脚本所在目录会生成对应的CSV文件
备注:
- 无线连接请修改脚本中的adb命令,加入"-s 序列号"即可
- 若需要解析不同类型包名,请修改脚本中:
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()