You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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()

使用说明

  1. 修改代码开头配置项里的三个路径,匹配本地实际目录和APKtool位置
  2. 直接运行脚本即可,脚本会自动扫描目标文件夹下所有APK,跳过非APK文件,逐个执行反编译
  3. 控制台会实时打印当前处理进度,所有任务跑完后会输出成功、失败的统计结果

注意事项

  • 反编译500个APK前提前确认磁盘剩余空间,反编译后的资源、smali文件总大小通常是原APK总体积的3-10倍
  • 如果需要调整APKtool的反编译规则,比如不反编译资源、不反编译dex、指定框架路径等,直接在cmd列表里追加对应APKtool参数即可
  • Mac/Linux系统如果没配置APKtool环境变量,APKTOOL_PATH填写apktool.sh的完整路径即可

内容的提问来源于stack exchange,提问作者sharon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:51:08