hybpjx 发表于 2026-3-3 13:33

分享一下AI帮我写的XAPK 转apk脚本

最近搞国外的网站老遇到XAPK 就自己找东西 让ai写了一个 脚本。大家可以看看

另外设置100个 回帖奖励吧~~~

import zipfile
import os
import shutil
import sys
import subprocess

def unzip_file(src, dst):
    with zipfile.ZipFile(src, 'r') as z:
      z.extractall(dst)

def find_files(base, ext):
    result = []
    for root, _, files in os.walk(base):
      for f in files:
            if f.endswith(ext):
                result.append(os.path.join(root, f))
    return result

def copy_files(files, dst):
    os.makedirs(dst, exist_ok=True)
    for f in files:
      shutil.copy(f, dst)

def copy_obb(base, dst):
    for root, dirs, _ in os.walk(base):
      for d in dirs:
            if d == 'obb':
                shutil.copytree(os.path.join(root, d), os.path.join(dst, d), dirs_exist_ok=True)

def adb_install_multiple(apk_dir):
    apk_list = sorted(find_files(apk_dir, '.apk'))
    if not apk_list:
      print('no apk files to install')
      return
    print('installing via adb...')
    cmd = ['adb', 'install-multiple'] + apk_list
    try:
      subprocess.run(cmd, check=True)
      print('install success')
    except subprocess.CalledProcessError:
      print('install failed')

def convert_xapk(xapk_path, output_dir=None, auto_install=False):
    if not os.path.exists(xapk_path):
      print('file not found')
      return
    if output_dir is None:
      output_dir = os.path.splitext(xapk_path)
    os.makedirs(output_dir, exist_ok=True)

    unzip_file(xapk_path, output_dir)
    apk_dir = os.path.join(output_dir, 'apk')
    obb_dir = os.path.join(output_dir, 'obb')

    apk_files = find_files(output_dir, '.apk')
    if apk_files:
      copy_files(apk_files, apk_dir)
      print('apk extracted')

    copy_obb(output_dir, obb_dir)
    print('obb extracted')

    if auto_install:
      adb_install_multiple(apk_dir)

    print('done:', output_dir)

if __name__ == '__main__':
    if len(sys.argv) < 2:
      print('usage: python xapk_to_apk.py app.xapk [--install]')
    else:
      xapk = sys.argv
      out = sys.argv if len(sys.argv) > 2 and not sys.argv.startswith('--') else None
      install_flag = '--install' in sys.argv
      convert_xapk(xapk, out, install_flag)

hybpjx 发表于 2026-3-3 13:36

q2119990 发表于 2026-3-3 13:35
这个咋用,不懂这个

# xapk_turn_apk
###&#128161; 简介

这是一个用 Python 编写的实用工具,用于处理 Android **`.xapk`** 文件。

`.xapk` 是一种特殊的 Android 应用程序包格式,它将基础 **`.apk`** 文件与大型游戏数据文件(通常是 **`.obb`** 文件)打包在一起。

本脚本可以帮助你:

1. 将 **`.xapk`** 文件解压,并自动提取出所有 **`.apk`** 文件和 **`.obb`** 数据文件。
2. (可选) 使用 **ADB (Android Debug Bridge)** 工具自动安装提取出的所有 `.apk` 文件。





### ⚙️ 使用方法

#### &#128736;️ 前提条件

1. **Python 3:** 确保你的系统上安装了 Python 3。
2. **ADB:** 如果需要使用自动安装功能 (`--install`),请确保 ADB 已安装且在系统环境变量 (PATH) 中。

#### &#128640; 运行脚本

将脚本保存为 `xapk_converter.py` 后,在命令行中执行以下命令:

| **功能**         | **命令格式**                                                 | **结果**                                                   |
| ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **仅转换**         | `python xapk_converter.py app_name.xapk`                     | 在同目录下创建 `app_name` 文件夹,包含提取的 APK 和 OBB 文件。 |
| **指定输出目录**   | `python xapk_converter.py app_name.xapk /path/to/output`   | 将文件提取到指定的文件夹。                                 |
| **转换并安装**   | `python xapk_converter.py app_name.xapk --install`         | 转换完成后,尝试通过 ADB 安装所有 `.apk` 文件。            |
| **指定目录并安装** | `python xapk_converter.py app_name.xapk /path/to/output --install` | 转换到指定位置,并尝试通过 ADB 安装。                        |

冥界3大法王 发表于 2026-3-3 14:05

这是一个用于处理XAPK文件的Python脚本,我将逐行解释:

## 导入模块 (1-5行)
```python
import zipfile# 用于处理ZIP压缩文件
import os       # 提供文件和目录操作功能
import shutil   # 提供高级文件操作,如复制、移动
import sys      # 访问命令行参数
import subprocess # 运行外部命令(如adb)
```

## 解压函数 (7-9行)
```python
def unzip_file(src, dst):
    with zipfile.ZipFile(src, 'r') as z:
      z.extractall(dst)
```
- **功能**:解压ZIP文件
- **src**:源文件路径
- **dst**:目标目录
- 使用`with`语句自动管理文件资源

## 查找文件函数 (11-17行)
```python
def find_files(base, ext):
    result = []
    for root, _, files in os.walk(base):
      for f in files:
            if f.endswith(ext):
                result.append(os.path.join(root, f))
    return result
```
- **功能**:递归查找指定扩展名的所有文件
- **os.walk**:遍历目录树,返回(root, dirs, files)
- 忽略目录名(用`_`占位)
- 匹配文件扩展名并返回完整路径列表

## 复制文件函数 (19-24行)
```python
def copy_files(files, dst):
    os.makedirs(dst, exist_ok=True)
    for f in files:
      shutil.copy(f, dst)
```
- **功能**:将文件列表复制到目标目录
- `exist_ok=True`:如果目录存在也不会报错
- `shutil.copy`:复制文件(不保留元数据)

## 复制obb文件夹函数 (26-30行)
```python
def copy_obb(base, dst):
    for root, dirs, _ in os.walk(base):
      for d in dirs:
            if d == 'obb':
                shutil.copytree(os.path.join(root, d), os.path.join(dst, d), dirs_exist_ok=True)
```
- **功能**:查找并复制名为"obb"的文件夹
- OBB是Android应用的扩展数据文件
- `dirs_exist_ok=True`:允许覆盖已存在的目录

## ADB安装函数 (32-44行)
```python
def adb_install_multiple(apk_dir):
    apk_list = sorted(find_files(apk_dir, '.apk'))
    if not apk_list:
      print('no apk files to install')
      return
    print('installing via adb...')
    cmd = ['adb', 'install-multiple'] + apk_list
    try:
      subprocess.run(cmd, check=True)
      print('install success')
    except subprocess.CalledProcessError:
      print('install failed')
```
- **功能**:使用adb安装多个APK文件
- `adb install-multiple`:Android命令,同时安装多个APK
- `check=True`:如果命令执行失败会抛出异常
- 异常处理捕获安装失败的情况

## 主转换函数 (46-67行)
```python
def convert_xapk(xapk_path, output_dir=None, auto_install=False):
    if not os.path.exists(xapk_path):
      print('file not found')
      return
    if output_dir is None:
      output_dir = os.path.splitext(xapk_path)
    os.makedirs(output_dir, exist_ok=True)
```
- 检查XAPK文件是否存在
- 如果没有指定输出目录,使用XAPK文件名(不含扩展名)
- 创建输出目录

```python
    unzip_file(xapk_path, output_dir)
    apk_dir = os.path.join(output_dir, 'apk')
    obb_dir = os.path.join(output_dir, 'obb')
```
- 解压XAPK文件
- 定义APK和OBB的目标目录

```python
    apk_files = find_files(output_dir, '.apk')
    if apk_files:
      copy_files(apk_files, apk_dir)
      print('apk extracted')

    copy_obb(output_dir, obb_dir)
    print('obb extracted')
```
- 查找所有APK文件并复制到apk目录
- 查找并复制obb文件夹

```python
    if auto_install:
      adb_install_multiple(apk_dir)

    print('done:', output_dir)
```
- 如果启用了自动安装,调用ADB安装函数
- 输出完成信息

## 主程序入口 (69-76行)
```python
if __name__ == '__main__':
    if len(sys.argv) < 2:
      print('usage: python xapk_to_apk.py app.xapk [--install]')
    else:
      xapk = sys.argv
      out = sys.argv if len(sys.argv) > 2 and not sys.argv.startswith('--') else None
      install_flag = '--install' in sys.argv
      convert_xapk(xapk, out, install_flag)
```
- 检查命令行参数
- 解析参数:
- 第一个参数:XAPK文件路径
- 第二个参数(可选):输出目录(不以"--"开头)
- 检查是否包含"--install"标志
- 调用主转换函数

## 使用示例
```bash
# 基本用法
python xapk_to_apk.py app.xapk

# 指定输出目录
python xapk_to_apk.py app.xapk output_folder

# 解压并自动安装
python xapk_to_apk.py app.xapk --install

# 指定输出目录并安装
python xapk_to_apk.py app.xapk output_folder --install
```

q2119990 发表于 2026-3-3 13:35

这个咋用,不懂这个

chencs 发表于 2026-3-3 13:38

一般都是用XAPK Installer直接安装

gugouo163 发表于 2026-3-3 13:38

现在要得到这个xapk文件也不容易了

小凯凯 发表于 2026-3-3 13:45

虽然看不懂,但觉得很厉害{:1_918:}

youfeili520 发表于 2026-3-3 13:47

大佬,看着很厉害!

xifan520 发表于 2026-3-3 13:50

这个ai竟然没写代码注释

刘昊然 发表于 2026-3-3 13:57

可以直接做成一个小工具

tztfznc191398 发表于 2026-3-3 14:05

不错不错,感谢楼主,解决了我一个大问题,拿来试试看
页: [1] 2 3 4 5
查看完整版本: 分享一下AI帮我写的XAPK 转apk脚本