【使用Python和ADB过滤与处理Android包名】

简介

在开发和调试Android应用时,获取和处理设备上的应用包名是一项常见任务。通过ADB(Android Debug Bridge),我们可以轻松列出设备上的所有包名。本文将介绍如何使用Python脚本获取这些包名,并通过灵活的过滤条件筛选出我们感兴趣的包名。

环境准备

首先,确保你已经在系统中安装了ADB工具,并且已经将设备通过USB连接到电脑。你可以在终端中运行以下命令,来验证ADB是否正常工作:

bash 复制代码
adb devices

如果显示了连接的设备列表,说明ADB已经正常工作。

Python脚本

下面是我们要实现的Python脚本。这个脚本会执行ADB命令获取所有的包名,并通过一些预定义的过滤条件筛选出最终结果。

python 复制代码
import subprocess

def get_third_party_packages():
    try:
        # 执行ADB命令,获取所有第三方应用包名
        result = subprocess.run(['adb', 'shell', 'pm', 'list', 'packages'], capture_output=True, text=True, check=True)
        
        # 包名过滤关键字列表
        filter_keywords = ['server', 'engineermode']
        # 完整包名匹配(删除这些包名)
        exact_matches = ['com.android.car.settings']
        # 以特定词结尾(删除以.android结尾的包名)
        ends_with = ['.android']
        
        packages = result.stdout.splitlines()
        filtered_packages = []
        
        for pkg in packages:
            pkg_name = pkg.replace('package:', '')
            # 过滤逻辑
            if (all(keyword not in pkg_name for keyword in filter_keywords) and
                all(not pkg_name.endswith(suffix) for suffix in ends_with) and
                pkg_name not in exact_matches):
                filtered_packages.append(pkg_name)
        
        return filtered_packages
    except subprocess.CalledProcessError as e:
        print(f"An error occurred while executing adb command: {e}")
        return []

def write_packages_to_file(packages, filename):
    try:
        with open(filename, 'w') as file:
            for pkg in packages:
                file.write(pkg + '\n')
    except IOError as e:
        print(f"An error occurred while writing to the file: {e}")

if __name__ == "__main__":
    packages = get_third_party_packages()
    write_packages_to_file(packages, 'packages.txt')
    print("Packages have been written to packages.txt")
脚本解析
  • get_third_party_packages:

    • 这个函数首先执行adb shell pm list packages命令来获取设备上的所有包名。
    • 通过过滤条件来筛选包名,确保我们最终获取到的包名不包含某些不需要的关键字或特定格式。
  • filter_keywords:

    • 这个列表包含我们想要过滤掉的包名中不希望包含的关键字,如'server''engineermode'
  • exact_matches:

    • 列表中的包名会被完整匹配,并从结果中过滤掉,如'com.android.car.settings'
  • ends_with:

    • 包名以特定词结尾时会被过滤掉,如以.android结尾的包名。
  • write_packages_to_file:

    • 这个函数将最终过滤后的包名写入到指定的文本文件中。
灵活的过滤条件

通过将过滤条件提取到列表中,脚本的扩展性和可维护性得到了极大提高。你可以根据需要,轻松地添加或删除过滤条件,而无需深入理解脚本的逻辑。

结论

使用这个简单的Python脚本,我们可以轻松地从设备中提取并处理应用包名。这对于需要分析或管理Android设备上安装的应用程序的开发人员和测试人员来说,是非常有用的工具。


相关推荐
kp0000010 分钟前
PHP弱类型安全漏洞解析与防范指南
android·开发语言·安全·web安全·php·漏洞
墨绿色的摆渡人24 分钟前
pytorch小记(二十一):PyTorch 中的 torch.randn 全面指南
人工智能·pytorch·python
大叔_爱编程27 分钟前
p024基于Django的网上购物系统的设计与实现
python·django·vue·毕业设计·源码·课程设计·网上购物系统
一个天蝎座 白勺 程序猿35 分钟前
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
redis·爬虫·python·selenium·scrapy·云原生·k8s
90后小陈老师35 分钟前
WebXR教学 09 项目7 使用python从0搭建一个简易个人博客
开发语言·python·web
weixin-WNXZ02181 小时前
闲上淘 自动上货工具运行原理解析
爬虫·python·自动化·软件工程·软件需求
正在走向自律1 小时前
Conda 完全指南:从环境管理到工具集成
开发语言·python·conda·numpy·fastapi·pip·开发工具
lqjun08271 小时前
PyTorch实现CrossEntropyLoss示例
人工智能·pytorch·python
DpHard2 小时前
Vscode 配置python调试环境
ide·vscode·python
小蜗笔记2 小时前
显卡、Cuda和pytorch兼容问题
人工智能·pytorch·python