如何用Python调用APKtool批量自动反编译文件夹内的APK文件
Python批量调用APKtool反编译文件夹内所有APK实现方案
前置准备
- 本地已完成APKtool环境配置,终端执行
apktool可正常唤起工具(未配置环境变量的话后续可在代码里写死apktool的完整执行路径) - 本地安装Python3.x环境,无需额外安装第三方库,仅用Python标准库即可实现需求
实现逻辑
核心逻辑为遍历指定APK存放目录,筛选所有后缀为.apk的文件,逐个拼接APKtool反编译命令调用执行,每个APK的反编译结果单独存放到对应命名的文件夹下,避免文件互相覆盖,同时记录处理成功/失败的数量,全程不需要手动输入任何文件名。
完整实现代码
import os import subprocess # -------------------------- 配置项 按需修改 -------------------------- APK_FOLDER = "./apks" # 存放500个APK文件的文件夹路径 OUTPUT_FOLDER = "./apk_decompiled_result" # 反编译结果存放路径 APKTOOL_PATH = "apktool" # 没配环境变量就写apktool完整路径,Windows下示例:"C:/tools/apktool.bat" # ------------------------------------------------------------------- def batch_decompile_apk(): # 自动创建结果输出目录 os.makedirs(OUTPUT_FOLDER, exist_ok=True) success_count = 0 fail_count = 0 # 遍历APK文件夹下所有文件 for file_name in os.listdir(APK_FOLDER): # 跳过非apk后缀的文件,兼容.APK大写后缀场景 if not file_name.lower().endswith(".apk"): continue apk_path = os.path.join(APK_FOLDER, file_name) # 反编译结果文件夹用APK原文件名(去掉.apk后缀)命名 output_apk_dir = os.path.join(OUTPUT_FOLDER, os.path.splitext(file_name)[0]) print(f"正在处理: {file_name}") # 拼接apktool反编译命令:-f参数表示强制覆盖已存在的结果目录 cmd = [ APKTOOL_PATH, "d", apk_path, "-o", output_apk_dir, "-f" ] try: # 执行命令,单个APK反编译超时设为300秒,可按需调整 subprocess.run( cmd, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=300 ) success_count += 1 print(f"处理完成: {file_name}") except subprocess.CalledProcessError as e: fail_count += 1 print(f"处理失败: {file_name}, 错误信息: {e.stderr.decode('utf-8', errors='ignore')}") except subprocess.TimeoutExpired: fail_count += 1 print(f"处理超时: {file_name}") print(f"\n全部任务执行完毕,成功: {success_count} 个,失败: {fail_count} 个") if __name__ == "__main__": batch_decompile_apk()
使用说明
- 修改代码开头配置项里的三个路径,匹配本地实际目录和APKtool位置
- 直接运行脚本即可,脚本会自动扫描目标文件夹下所有APK,跳过非APK文件,逐个执行反编译
- 控制台会实时打印当前处理进度,所有任务跑完后会输出成功、失败的统计结果
注意事项
- 反编译500个APK前提前确认磁盘剩余空间,反编译后的资源、smali文件总大小通常是原APK总体积的3-10倍
- 如果需要调整APKtool的反编译规则,比如不反编译资源、不反编译dex、指定框架路径等,直接在
cmd列表里追加对应APKtool参数即可 - Mac/Linux系统如果没配置APKtool环境变量,
APKTOOL_PATH填写apktool.sh的完整路径即可
内容的提问来源于stack exchange,提问作者sharon
相关产品推荐
相关产品推荐

