如何通过脚本/ADB命令在Android 9上指定应用图标位置?
可行方案:通过Root+ADB/开机脚本恢复图标布局
由于你已获取Root权限,完全可以通过操作Launcher的数据库来固定图标位置,以下是具体步骤:
1. 备份当前整理好的图标布局
首先在你手动整理完图标后,导出Launcher的布局数据库:
- 原生Android 9的Launcher数据库路径为
/data/data/com.android.launcher3/databases/launcher.db;如果是第三方Launcher(如Nova),替换对应包名即可(比如Nova的路径是/data/data/com.teslacoilsw.launcher/databases/nova.db)。 - 用ADB+Root权限导出到SD卡:
adb shell su -c "cp /data/data/com.android.launcher3/databases/launcher.db /sdcard/launcher_backup.db" - 可选:把备份文件拉到电脑留存:
adb pull /sdcard/launcher_backup.db
2. 编写恢复脚本(两种方式可选)
方式一:电脑端ADB脚本(手动触发)
创建一个restore_launcher.sh脚本,内容如下:
# 停止Launcher进程 adb shell su -c "stop com.android.launcher3" # 替换数据库 adb shell su -c "cp /sdcard/launcher_backup.db /data/data/com.android.launcher3/databases/launcher.db" # 修复数据库权限(替换u0_aXX为Launcher的UID,可通过adb shell dumpsys package com.android.launcher3 | grep userId查看) adb shell su -c "chmod 660 /data/data/com.android.launcher3/databases/launcher.db" adb shell su -c "chown u0_aXX:u0_aXX /data/data/com.android.launcher3/databases/launcher.db" # 重启Launcher adb shell su -c "start com.android.launcher3"
每次重启后运行该脚本,图标就会恢复到备份时的布局。
方式二:手机端开机自动执行脚本(无需电脑)
利用Magisk的开机自启脚本功能,实现重启后自动恢复:
- 将备份的
launcher_backup.db放到手机的/data/local/tmp/目录:adb push launcher_backup.db /data/local/tmp/ - 创建脚本文件
/data/adb/service.d/restore_launcher_layout.sh,内容如下:#!/system/bin/sh # 等待SD卡加载完成,根据实际加载速度调整sleep时长 sleep 30 # 停止Launcher stop com.android.launcher3 # 替换数据库 cp /data/local/tmp/launcher_backup.db /data/data/com.android.launcher3/databases/launcher.db # 自动获取并设置UID权限 LAUNCHER_UID=$(dumpsys package com.android.launcher3 | grep -oP 'userId=\K\d+') chmod 660 /data/data/com.android.launcher3/databases/launcher.db chown u0_a${LAUNCHER_UID}:u0_a${LAUNCHER_UID} /data/data/com.android.launcher3/databases/launcher.db # 清除Launcher缓存(可选,防止布局异常) rm -rf /data/data/com.android.launcher3/cache/ # 重启Launcher start com.android.launcher3 - 给脚本添加执行权限:
adb shell su -c "chmod +x /data/adb/service.d/restore_launcher_layout.sh"
注意事项
- 不同Launcher的数据库结构和路径有差异,使用第三方Launcher时需替换对应包名和数据库文件名。
- 调整
sleep时长时,确保SD卡完全加载后再执行数据库替换,避免因SD卡未挂载导致替换失败。 - 若替换后布局仍异常,可尝试清除Launcher的全部数据后再执行恢复脚本。
内容的提问来源于stack exchange,提问作者Letus252
相关产品推荐
相关产品推荐

