在提交 Issue 前请确保您已进行以下检查:

  1. 您已搜索 Issues 列表,确认没有与您的问题相关的内容。
  2. 如果修复失败或刷入新的 boot.img 后设备无法启动,请访问 KernelPatch 进行咨询。
  3. 您将 Bug 报告文件上传至 APatch 管理器 > 设置 > 发送日志。
  4. 您知道如何重现该问题,且该问题可能并非特定于您的设备。

版本要求:

  • 您正在使用最新 CI 版本的 APatch Manager。

Bug 描述:
当运行 sh 脚本,特别是命令 a1="$(pm path "$pkg")" 时,总是出现 cmd: Failure calling service package: Failed transaction (2147483646) 的错误。但通过管道输出时,可以得到实际结果。

复现方法:

  1. 运行 testing.sh 脚本。
  2. 检查 /data/adb/service.d/pm_path_redir_poc.log 中的日志输出。
  3. 在每个循环中,使用 v_plain="$(pm path "$pkg")" 的方法会持续失败,而其他方法均能正确解析。

预期行为:
预期在重定向输出或未重定向输出之间没有区别。

实际行为:
执行失败,显示 cmd: Failure calling service package: Failed transaction (2147483646)

截图:
无响应。

日志:

a14xm:/data/adb/service.d # cat pm_path_redir_poc.log
[INFO] 2025-12-14 08:11:39 === start pid=31367 ===
[INFO] 2025-12-14 08:11:39 pkg='com.google.android.youtube'
[INFO] 2025-12-14 08:11:39 type(pm)='pm is a tracked alias for /system/bin/pm'
[INFO] 2025-12-14 08:11:39 fd0 -> /debug_ramdisk/pts/0
[INFO] 2025-12-14 08:11:39 fd1 -> /data/adb/service.d/pm_path_redir_poc.log
[INFO] 2025-12-14 08:11:39 fd2 -> /data/adb/service.d/pm_path_redir_poc.log
[INFO] 2025-12-14 08:11:39 --- iter=0 ---
[INFO] 2025-12-14 08:11:39 plain='cmd: Failure calling service package: Failed transaction (2147483646)
[INFO] 2025-12-14 08:11:39 stderr_to_devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_file.stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_file.stderr='
[INFO] 2025-12-14 08:11:40 subshell_exec_2devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 subshell_exec_2to1='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 --- iter=1 ---
[INFO] 2025-12-14 08:11:40 plain='cmd: Failure calling service package: Failed transaction (2147483646)
[INFO] 2025-12-14 08:11:40 stderr_to_devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_file.stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 stderr_to_file.stderr='
[INFO] 2025-12-14 08:11:40 subshell_exec_2devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 subshell_exec_2to1='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:40 --- iter=2 ---
[INFO] 2025-12-14 08:11:40 plain='cmd: Failure calling service package: Failed transaction (2147483646)
[INFO] 2025-12-14 08:11:40 stderr_to_devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_file.stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_file.stderr='
[INFO] 2025-12-14 08:11:41 subshell_exec_2devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 subshell_exec_2to1='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 --- iter=3 ---
[INFO] 2025-12-14 08:11:41 plain='cmd: Failure calling service package: Failed transaction (2147483646)
[INFO] 2025-12-14 08:11:41 stderr_to_devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_file.stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_file.stderr='
[INFO] 2025-12-14 08:11:41 subshell_exec_2devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 subshell_exec_2to1='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 --- iter=4 ---
[INFO] 2025-12-14 08:11:41 plain='cmd: Failure calling service package: Failed transaction (2147483646)
[INFO] 2025-12-14 08:11:41 stderr_to_devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:41 stderr_to_stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:42 stderr_to_file.stdout='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:42 stderr_to_file.stderr='
[INFO] 2025-12-14 08:11:42 subshell_exec_2devnull='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:42 subshell_exec_2to1='package:/data/app/~~arY4yjg3P9xYKDk3T6Wn8w==/com.google.android.youtube-PgB8vwNmEZ0ztAgGJhCIlw==/base.apk'
[INFO] 2025-12-14 08:11:42 === end pid=31367 ===

设备名称:Samsung SM-A146P
系统版本:One UI 7
APatch 版本:11142
内核版本:6.6.50
KernelPatch 版本:0.12.2
其他信息:

#!/system/bin/sh
# PoC: `pm path` output changes depending on stderr redirection.
# Uses ONLY variable="(...)" captures (no functions).

LOG="/data/adb/service.d/pm_path_redir_poc.log"
pkg="com.google.android.youtube"
tmp="/data/local/tmp"
pid="$$"

mkdir -p "$(dirname "$LOG")" 2>/dev/null
mkdir -p "$tmp" 2>/dev/null
: >"$LOG" 2>/dev/null || LOG="$tmp/pm_path_redir_poc.log"

# Match service.d style: everything the script prints goes to a file
exec >>"$LOG" 2>&1

echo "[INFO] $(date '+%F %T') === start pid=$pid ==="
echo "[INFO] $(date '+%F %T') pkg='$pkg'">
echo "[INFO] $(date '+%F %T') type(pm)='$(type pm 2>&1)'">
echo "[INFO] $(date '+%F %T') fd0 -> $(readlink /proc/$$/fd/0 2>/dev/null || echo '?')">
echo "[INFO] $(date '+%F %T') fd1 -> $(readlink /proc/$$/fd/1 2>/dev/null || echo '?')">
echo "[INFO] $(date '+%F %T') fd2 -> $(readlink /proc/$$/fd/2 2>/dev/null || echo '?')"

i=0
N=4
while [ "$i" -lt "$N" ]; do
  echo "[INFO] $(date '+%F %T') --- iter=$i ---"

  v_plain="$(pm path "$pkg")"
echo "[INFO] $(date '+%F %T') plain='$v_plain'">

  v_nullerr="$(pm path "$pkg" 2>/dev/null)"
echo "[INFO] $(date '+%F %T') stderr_to_devnull='$v_nullerr'">

  v_merge="$(pm path "$pkg" 2>&1)"
echo "[INFO] $(date '+%F %T') stderr_to_stdout='$v_merge'">

  errf="$tmp/pm_path.$pid.$i.err"
  rm -f "$errf"
  v_errfile="$(pm path "$pkg" 2>"$errf")"
  e_errfile="$(cat "$errf" 2>/dev/null)"
  rm -f "$errf"
echo "[INFO] $(date '+%F %T') stderr_to_file.stdout='$v_errfile'"
echo "[INFO] $(date '+%F %T') stderr_to_file.stderr='$e_errfile'"

  v_subshell_exec2devnull="
    ( exec 2>/dev/null; pm path "$pkg" )"
echo "[INFO] $(date '+%F %T') subshell_exec_2devnull='$v_subshell_exec2devnull'"

  v_subshell_exec2stdout="
    ( exec 2>&1; pm path "$pkg" )"
echo "[INFO] $(date '+%F %T') subshell_exec_2to1='$v_subshell_exec2stdout'"

  i=$((i+1))

done

echo "[INFO] $(date '+%F %T') === end pid=$pid ==="
exit 0