133 lines
3.4 KiB
Python
133 lines
3.4 KiB
Python
#!/usr/bin/env python3
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import glob
|
|
|
|
def log(level, msg):
|
|
icons = {'INFO': '[*]', 'SUCCESS': '[✓]', 'ERROR': '[✗]', 'WARNING': '[!]'}
|
|
print(f"{icons.get(level, '[*]')} {msg}")
|
|
|
|
def run_cmd(cmd):
|
|
try:
|
|
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
|
|
return result.returncode == 0
|
|
except:
|
|
return False
|
|
|
|
def check_glibc():
|
|
"""检测 glibc 是否已安装"""
|
|
log('INFO', "检测 glibc...")
|
|
|
|
# 检查关键路径
|
|
paths = ['/lib/libc.so.6', '/usr/glibc-compat/lib/libc.so.6']
|
|
for path in paths:
|
|
if os.path.exists(path):
|
|
log('SUCCESS', f"glibc 已安装: {path}")
|
|
return True
|
|
|
|
# 检查 apk 包
|
|
if run_cmd("apk list --installed | grep -q glibc"):
|
|
log('SUCCESS', "glibc 已通过 apk 安装")
|
|
return True
|
|
|
|
log('WARNING', "未检测到 glibc")
|
|
return False
|
|
|
|
def install_glibc():
|
|
"""运行 glibc.py 安装脚本"""
|
|
if not os.path.exists("glibc.py"):
|
|
log('ERROR', "找不到 glibc.py 脚本")
|
|
return False
|
|
|
|
log('INFO', "运行 glibc.py 安装...")
|
|
return os.system("python3 glibc.py") == 0
|
|
|
|
def find_miuiauto_files():
|
|
"""查找 miuiauto 相关二进制文件"""
|
|
log('INFO', "搜索 miuiauto 二进制文件...")
|
|
|
|
files = []
|
|
for pattern in ["*miuiauto*", "*MIUIAUTO*", "*MiuiAuto*"]:
|
|
files.extend(glob.glob(pattern))
|
|
|
|
# 过滤二进制文件
|
|
binaries = []
|
|
for f in files:
|
|
if os.path.isfile(f) and is_binary(f):
|
|
binaries.append(f)
|
|
log('INFO', f"找到: {f}")
|
|
|
|
return binaries
|
|
|
|
def is_binary(file_path):
|
|
"""检查是否为二进制文件"""
|
|
try:
|
|
with open(file_path, 'rb') as f:
|
|
chunk = f.read(512)
|
|
return b'\x00' in chunk or chunk.startswith(b'\x7fELF')
|
|
except:
|
|
return False
|
|
|
|
def run_binary(binary_path):
|
|
"""添加执行权限并运行二进制文件"""
|
|
name = os.path.basename(binary_path)
|
|
log('INFO', f"运行 {name}...")
|
|
|
|
# 添加执行权限
|
|
os.system(f"chmod +x '{binary_path}'")
|
|
|
|
# 运行程序
|
|
print("=" * 40)
|
|
result = os.system(f"./{name}")
|
|
print("=" * 40)
|
|
|
|
if result == 0:
|
|
log('SUCCESS', f"{name} 运行完成")
|
|
else:
|
|
log('WARNING', f"{name} 退出码: {result}")
|
|
|
|
return result == 0
|
|
|
|
def main():
|
|
print("=" * 40)
|
|
print(" MiuiAuto 自动运行工具")
|
|
print("=" * 40)
|
|
|
|
# 检查权限
|
|
if os.geteuid() != 0:
|
|
log('ERROR', "需要 root 权限")
|
|
log('INFO', "使用: sudo python3 miuiauto.py")
|
|
return False
|
|
|
|
# 1. 检测/安装 glibc
|
|
if check_glibc():
|
|
log('SUCCESS', "glibc 已安装,跳过")
|
|
else:
|
|
log('INFO', "安装 glibc...")
|
|
if not install_glibc():
|
|
log('ERROR', "glibc 安装失败")
|
|
return False
|
|
|
|
# 2. 查找并运行 miuiauto 文件
|
|
binaries = find_miuiauto_files()
|
|
if not binaries:
|
|
log('ERROR', "未找到 miuiauto 二进制文件")
|
|
return False
|
|
|
|
# 3. 运行所有找到的文件
|
|
for binary in binaries:
|
|
run_binary(binary)
|
|
|
|
log('SUCCESS', "完成!")
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
success = main()
|
|
sys.exit(0 if success else 1)
|
|
except KeyboardInterrupt:
|
|
print("\n")
|
|
log('WARNING', "用户中断")
|
|
sys.exit(1)
|