#!/bin/bash # update_wechathook_db.sh — 重装 wechathook APK 后更新 LSPosed modules_config.db set -e ADB="${ADB:-$(dirname "$0")/../platform-tools/adb}" [ ! -f "$ADB" ] && ADB=adb TERMUX_PY=/data/data/com.termux/files/usr/bin/python3 NEW_PATH=$($ADB shell 'pm path com.example.wechathook' | tr -d '\r' | sed 's/package://') echo "New APK path: $NEW_PATH" # Phase 1: in-place UPDATE via Python (WAL commit visible to running lspd) $ADB shell "su -c \"$TERMUX_PY -c \\\" import sqlite3 db = sqlite3.connect('/data/adb/lspd/config/modules_config.db') db.execute(\\\\\\\"UPDATE modules SET apk_path='${NEW_PATH}' WHERE module_pkg_name='com.example.wechathook'\\\\\\\") db.commit() try: db.execute('PRAGMA wal_checkpoint(TRUNCATE)') except: pass db.close() print('phase1 done') \\\"\"" 2>&1 # Phase 2: pull + checkpoint locally + push clean main file $ADB shell 'su -c "cp /data/adb/lspd/config/modules_config.db /data/local/tmp/mc_wh.db && cp /data/adb/lspd/config/modules_config.db-wal /data/local/tmp/mc_wh.db-wal 2>/dev/null; chmod 644 /data/local/tmp/mc_wh.db /data/local/tmp/mc_wh.db-wal 2>/dev/null; true"' $ADB pull /data/local/tmp/mc_wh.db /tmp/mc_wh.db 2>/dev/null $ADB pull /data/local/tmp/mc_wh.db-wal /tmp/mc_wh.db-wal 2>/dev/null || true sqlite3 /tmp/mc_wh.db "PRAGMA wal_checkpoint(TRUNCATE);" 2>/dev/null || true ACTUAL=$(sqlite3 /tmp/mc_wh.db "SELECT apk_path FROM modules WHERE module_pkg_name='com.example.wechathook';") echo "Verified path: $ACTUAL" $ADB push /tmp/mc_wh.db /data/local/tmp/mc_wh_clean.db $ADB shell 'su -c "cp /data/local/tmp/mc_wh_clean.db /data/adb/lspd/config/modules_config.db && rm -f /data/adb/lspd/config/modules_config.db-wal /data/adb/lspd/config/modules_config.db-shm && echo phase2 done"' # Phase 3: verify scope (mid=18, com.tencent.mm) MID=$(sqlite3 /tmp/mc_wh.db "SELECT mid FROM modules WHERE module_pkg_name='com.example.wechathook';") echo "mid: $MID" SCOPE=$(sqlite3 /tmp/mc_wh.db "SELECT count(*) FROM scope WHERE mid=$MID AND app_pkg_name='com.tencent.mm';") if [ "$SCOPE" -eq 0 ]; then echo "scope missing — inserting mid=$MID → com.tencent.mm" sqlite3 /tmp/mc_wh.db "INSERT OR REPLACE INTO scope (mid, app_pkg_name, user_id) VALUES ($MID, 'com.tencent.mm', 0);" $ADB push /tmp/mc_wh.db /data/local/tmp/mc_wh_scope.db $ADB shell "su -c 'cp /data/local/tmp/mc_wh_scope.db /data/adb/lspd/config/modules_config.db && rm -f /data/adb/lspd/config/modules_config.db-wal /data/adb/lspd/config/modules_config.db-shm && echo scope fixed'" else echo "scope OK (mid=$MID, com.tencent.mm exists)" fi echo "DB updated. Reboot required."