shizukurunner 中文文档 下载 App

高级文件系统操作 - 备份 迁移 修改配置

shell 权限下能碰哪些目录

Runner(shell 权限)能操作的目录:

目录权限典型操作
/sdcard/完整读写用户数据、下载文件、备份
/data/app/只读提取 APK
/data/data/<包名>/部分可读某些 App 数据目录
/data/local/tmp/读写临时文件存放、推文件进系统
/system/只读读系统文件、查看 ROM 版本
/vendor/只读查看硬件配置

root 权限下再加:

实战场景一:备份所有已安装 APK

想保留一份当前手机上所有 App 的安装包:

# 方案一:shell 权限下从 /data/app 提取
mkdir -p /sdcard/apk-backup
for apk in $(ls /data/app/*/base.apk); do
    pkg=$(echo $apk | grep -oP '(?<=/data/app/)[^/]+')
    cp $apk /sdcard/apk-backup/${pkg}.apk
done

Runner 里直接跑整个脚本?不行——Runner 里执行 shell 命令是逐行解释的,for 循环脚本可能不被完整支持。正确做法是:

  1. 在电脑上写好这个脚本
  2. 推到 /data/local/tmp/backup.sh
  3. Runner 里执行:
   sh /data/local/tmp/backup.sh

实战场景二:修改 /sdcard 下的配置文件

很多 App 会把配置文件存在 /sdcard/ 下(比如 /sdcard/Android/data/<包名>/files/)。直接用 cat + 重定向修改:

# 先备份
cp /sdcard/Android/data/com.example.app/files/config.json /sdcard/config.json.bak

# 修改(用 echo 重写)
echo '{"key": "new_value"}' > /sdcard/Android/data/com.example.app/files/config.json

# 或者追加一行
echo 'new_config_line' >> /sdcard/Android/data/com.example.app/files/config.json

注意:如果配置文件是 JSON 格式,用 echo 重写会覆盖整个文件,除非你在 shell 里用 jq 这类 JSON 工具做增量修改(Android 默认不带 jq,需要自己推)。

实战场景三:查看系统构建信息

# 查看 ROM 版本
cat /system/build.prop | grep ro.build.display.id
# 输出: ro.build.display.id=MIUI Global 14.0.6.0

# 查看 Android 版本
getprop ro.build.version.release

# 查看设备型号
getprop ro.product.model

# 查看 CPU 架构
cat /proc/cpuinfo

实战场景四:清理应用缓存

# 方式一:pm 命令清理指定 App 数据(会清应用数据,包括登录状态!)
pm clear com.example.app

# 方式二:只清理缓存目录(不会清登录状态)
rm -rf /data/data/com.example.app/cache/*
# 注意:shell 权限可能碰不到 /data/data 下某些目录

# 方式三:清理 /sdcard/Android/data/ 下的临时文件
rm -rf /sdcard/Android/data/com.example.app/cache/*

推文件进系统

shell 权限下你可以把电脑上的文件推到 /data/local/tmp/,然后 Runner 里执行:

# 电脑上
adb push script.sh /data/local/tmp/

# Runner 里执行
sh /data/local/tmp/script.sh

这是很多"一键脚本"流传的方式——脚本本身放在 /data/local/tmp/,Runner 执行它,执行完可以留着复用或删掉。

注意 shell 与 root 边界

以下操作必须 root 权限,Runner 开降权时会被拒绝:

如果 Runner 在 root 权限下运行,这些就都能做——但做之前想清楚,rm -rf /system/* 一行命令就能让手机变砖。