Files
workphone-sdk/sdk/scripts/extract_aochuang_to_ziliao.sh

153 lines
4.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# 奥创工作手机 · 真机全量提取到 资料/奥创工作手机APK提取/
# 真源:资料/奥创微信控制接口与插件提取复用指南.md · 机擎/阿服/奥创真机清机/SKILL.md
#
# 用法:
# bash sdk/scripts/extract_aochuang_to_ziliao.sh [-s SERIAL] [--decompile]
#
# 前置Type-C USB 调试 + adb devices 见 device或无线 adb connect
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
OUT="${ROOT}/资料/奥创工作手机APK提取"
EVID="${ROOT}/开发文档/8、部署/05-测试验收/$(date +%Y%m%d)_奥创资料提取_$(date +%H%M%S)"
SERIAL=""
DECOMPILE=0
DEFAULT_SERIAL="xgfe65eimrrofyws"
AOCHUANG_PACKAGES=(
"org.xeslciw.manager"
"top.zzz.vivwxjz"
"uni.UNI9421F6C"
)
AOCHUANG_ROOT_PATHS=(
"/data/adb/xesd"
"/data/adb/modules"
)
log() { printf '[%s] %s\n' "$(date '+%H:%M:%S')" "$*"; }
usage() {
cat <<'EOF'
奥创真机全量提取 → 资料/奥创工作手机APK提取/
bash sdk/scripts/extract_aochuang_to_ziliao.sh [-s SERIAL] [--decompile]
--decompile 额外 apktool 反编译到 decompiled/<包名>/
EOF
}
while [[ $# -gt 0 ]]; do
case "$1" in
-s) SERIAL="$2"; shift 2 ;;
--decompile) DECOMPILE=1; shift ;;
-h|--help) usage; exit 0 ;;
*) echo "未知参数: $1"; usage; exit 1 ;;
esac
done
pick_serial() {
if [[ -n "$SERIAL" ]]; then return; fi
local online
online="$(adb devices | awk '/\tdevice$/{print $1; exit}')"
if [[ -n "$online" ]]; then SERIAL="$online"; return; fi
if adb devices | grep -q "^${DEFAULT_SERIAL}[[:space:]]"; then
SERIAL="$DEFAULT_SERIAL"
fi
}
run_adb() { adb -s "$SERIAL" "$@"; }
run_sh() { run_adb shell "$@"; }
pick_su() {
run_sh 'for p in /sbin/su /system/bin/su /system/xbin/su su; do
if [ -x "$p" ] 2>/dev/null || command -v "$p" >/dev/null 2>&1; then echo "$p"; exit 0; fi
done; exit 1' 2>/dev/null || true
}
run_root() {
local cmd="$1"
local su
su="$(pick_su)"
if [[ -n "$su" ]]; then
run_sh "su -c $(printf '%q' "$cmd")" 2>/dev/null
else
run_sh "$cmd" 2>/dev/null || true
fi
}
pick_serial
if [[ -z "$SERIAL" ]] || ! adb devices | grep -q "^${SERIAL}[[:space:]]*device"; then
echo "FAIL: 无 ADB 在线设备。请 Type-C 连接并开启 USB 调试,或 adb connect <ip>:5555"
adb devices -l
exit 1
fi
mkdir -p "$OUT" "$EVID"
log "serial=$SERIAL out=$OUT"
# --- 设备画像 ---
{
echo "# 奥创提取 · 设备检查 $(date '+%Y-%m-%d %H:%M:%S')"
echo
adb devices -l
echo
run_adb shell getprop ro.product.model
run_adb shell getprop ro.build.version.release
run_adb shell getprop ro.product.brand
} > "$EVID/00_device_info.txt"
run_sh pm list packages > "$EVID/01_all_packages.txt" 2>/dev/null || true
grep -E 'xes|zzz|vivwx|UNI9421|cloudservice|magisk|tencent\.mm' "$EVID/01_all_packages.txt" > "$EVID/02_aochuang_related_packages.txt" 2>/dev/null || true
# --- 拉 APK ---
for pkg in "${AOCHUANG_PACKAGES[@]}"; do
apk_path="$(run_sh pm path "$pkg" 2>/dev/null | head -1 | cut -d: -f2 | tr -d '\r' || true)"
if [[ -z "$apk_path" ]]; then
log "SKIP APK 未安装: $pkg"
echo "NOT_INSTALLED $pkg" >> "$EVID/03_apk_pull.log"
continue
fi
ver="$(run_sh dumpsys package "$pkg" 2>/dev/null | awk -F= '/versionName/{print $2; exit}' | tr -d '\r ')"
safe="${pkg}_v${ver:-unknown}.apk"
log "PULL $pkg -> $safe"
run_adb pull "$apk_path" "$OUT/$safe"
echo "OK $pkg $apk_path -> $OUT/$safe" >> "$EVID/03_apk_pull.log"
done
# --- 框架 / Magisk 模块(需 root---
for p in "${AOCHUANG_ROOT_PATHS[@]}"; do
dest="$OUT/device_root$(echo "$p" | tr '/' '_')"
log "TAR $p (root)"
run_root "test -e '$p' && tar -czf /sdcard/aochuang_extract_$(basename "$p").tgz '$p' 2>/dev/null" || true
tgz="/sdcard/aochuang_extract_$(basename "$p").tgz"
if run_sh "test -f '$tgz'" 2>/dev/null | grep -q .; then
mkdir -p "$dest"
run_adb pull "$tgz" "$dest/" 2>/dev/null || true
run_root "rm -f '$tgz'" || true
else
echo "MISSING_OR_DENIED $p" >> "$EVID/04_root_paths.log"
fi
done
# Magisk 模块名过滤
run_root 'ls /data/adb/modules 2>/dev/null' > "$EVID/05_magisk_modules.txt" 2>/dev/null || true
# --- 可选反编译 ---
if [[ "$DECOMPILE" -eq 1 ]] && command -v apktool >/dev/null 2>&1; then
DEC="$OUT/decompiled"
mkdir -p "$DEC"
for apk in "$OUT"/*.apk; do
[[ -f "$apk" ]] || continue
base="$(basename "$apk" .apk)"
log "apktool d $base"
apktool d -f -o "$DEC/$base" "$apk" >> "$EVID/06_apktool.log" 2>&1 || true
done
fi
log "DONE 证据目录: $EVID"
log "资料目录: $OUT"
ls -lah "$OUT"