Auto.js 脚本:清理手机数据但保留账号

Auto.js 脚本:清理手机数据但保留账号

以下是一个使用 Auto.js 实现的脚本,它可以帮你清理手机数据(类似恢复出厂设置),同时尽可能保留已登录的账号状态。请注意,这个脚本不能完全等同于真正的恢复出厂设置,但可以实现类似效果。

javascript 复制代码
// 脚本功能:清理手机数据但保留账号状态
// 需要 Auto.js 4.1.1 以上版本
// 需要 root 权限或无障碍权限

// 配置区域 ==================================
var config = {
    keepAccounts: true,      // 是否保留账号
    clearAppData: true,      // 是否清除应用数据
    clearCache: true,        // 是否清除缓存
    whitelist: [             // 不想清理的应用包名列表
        "com.tencent.mm",    // 微信
        "com.tencent.mobileqq", // QQ
        "com.google.android.gms", // Google服务
        "com.android.vending",   // Google Play商店
        // 添加其他你想保留的应用
    ]
};
// ==========================================

// 主函数
function main() {
    // 请求必要的权限
    requestPermissions();
    
    // 显示警告信息
    alert("警告", "此脚本将清理手机数据,请确保重要数据已备份!", function(){
        // 开始执行清理
        startCleaning();
    });
}

// 请求权限
function requestPermissions() {
    // 请求root权限
    if (!requestRoot()) {
        toast("未获取root权限,部分功能可能无法使用");
    }
    
    // 请求无障碍服务
    auto.waitFor();
}

// 开始清理流程
function startCleaning() {
    // 显示进度对话框
    let progressDialog = dialogs.build({
        title: "正在清理",
        progress: {
            max: 100,
            showMinMax: true
        },
        cancelable: false
    }).show();
    
    // 步骤1: 清理应用缓存 (10%)
    if (config.clearCache) {
        progressDialog.setProgress(10);
        progressDialog.setMessage("正在清理应用缓存...");
        clearAllAppCache();
    }
    
    // 步骤2: 清理应用数据 (40%)
    if (config.clearAppData) {
        progressDialog.setProgress(40);
        progressDialog.setMessage("正在清理应用数据...");
        clearAppData();
    }
    
    // 步骤3: 清理系统缓存 (70%)
    progressDialog.setProgress(70);
    progressDialog.setMessage("正在清理系统缓存...");
    clearSystemCache();
    
    // 步骤4: 保留账号数据 (90%)
    if (config.keepAccounts) {
        progressDialog.setProgress(90);
        progressDialog.setMessage("正在保留账号数据...");
        backupAccounts();
    }
    
    // 完成 (100%)
    progressDialog.setProgress(100);
    progressDialog.setMessage("清理完成!");
    sleep(1000);
    progressDialog.dismiss();
    
    toast("清理完成!");
}

// 清理所有应用缓存
function clearAllAppCache() {
    let pm = context.getPackageManager();
    let apps = pm.getInstalledApplications(0);
    
    apps.forEach(app => {
        if (!config.whitelist.includes(app.packageName)) {
            try {
                let cmd = "pm clear " + app.packageName;
                shell(cmd, true);
            } catch (e) {
                console.log("清理缓存失败: " + app.packageName);
            }
        }
    });
}

// 清理应用数据
function clearAppData() {
    let pm = context.getPackageManager();
    let apps = pm.getInstalledApplications(0);
    
    apps.forEach(app => {
        if (!config.whitelist.includes(app.packageName)) {
            try {
                // 删除应用数据目录
                let dataDir = "/data/data/" + app.packageName;
                if (files.exists(dataDir)) {
                    shell("rm -rf " + dataDir, true);
                }
                
                // 删除外部存储数据
                let extDir = "/sdcard/Android/data/" + app.packageName;
                if (files.exists(extDir)) {
                    shell("rm -rf " + extDir, true);
                }
            } catch (e) {
                console.log("清理数据失败: " + app.packageName);
            }
        }
    });
}

// 清理系统缓存
function clearSystemCache() {
    try {
        // 清理dalvik缓存
        shell("rm -rf /data/dalvik-cache", true);
        
        // 清理临时文件
        shell("rm -rf /data/local/tmp/*", true);
        shell("rm -rf /cache/*", true);
        
        // 清理日志
        shell("rm -rf /data/log/*", true);
        shell("rm -rf /data/tombstones/*", true);
    } catch (e) {
        console.log("清理系统缓存失败: " + e);
    }
}

// 备份账号数据
function backupAccounts() {
    try {
        // 备份账号数据库 (需要root)
        let accountDb = "/data/system/users/0/accounts.db";
        let backupDir = "/sdcard/account_backup/";
        
        if (files.exists(accountDb)) {
            if (!files.exists(backupDir)) {
                files.createWithDirs(backupDir);
            }
            shell("cp " + accountDb + " " + backupDir + "accounts.db", true);
        }
    } catch (e) {
        console.log("备份账号数据失败: " + e);
    }
}

// 运行主函数
main();

使用说明

  1. 准备工作:

    • 安装 Auto.js 应用 (建议4.1.1以上版本)
    • 确保手机已root (部分功能需要root权限)
    • 备份重要数据
  2. 配置脚本:

    • 修改 config 部分,设置你想保留的应用包名
    • 设置是否保留账号、清除应用数据等选项
  3. 运行脚本:

    • 将脚本导入Auto.js并运行
    • 授予必要的权限
    • 脚本会逐步清理手机数据

注意事项

  1. 此脚本不能完全等同于恢复出厂设置,但可以达到类似效果
  2. 部分账号可能仍需要重新登录,取决于应用的账号管理机制
  3. 建议在执行前手动备份重要数据
  4. 某些系统可能需要调整文件路径
  5. 首次运行建议先在测试设备上尝试

高级选项

如果你需要更彻底的清理,可以添加以下功能:

  • 清理媒体存储数据库
  • 重置系统设置
  • 清理更多系统目录

但请注意,这些操作可能有风险,建议在充分了解后果后再实施。

相关推荐
清同趣科研14 分钟前
R绘图|3分钟复现瑞士“苏黎世大学”Nature全球地图——基于R包ggplot2+sf等
开发语言·r语言
Cyanto23 分钟前
Java使用JDBC操作数据库
java·开发语言·数据库
zxctsclrjjjcph23 分钟前
【动态规划】子序列问题
开发语言·c++·算法·动态规划·力扣
forth touch40 分钟前
C和指针——预处理
c语言·开发语言
工一木子41 分钟前
【Java项目脚手架系列】第二篇:JavaWeb项目脚手架
java·开发语言
字节旅行者41 分钟前
如何使用VSCode编写C、C++和Python程序
开发语言·c++·ide·vscode·python·编辑器
Sheep Shaun1 小时前
C++ STL简介:构建高效程序的基石
开发语言·数据结构·c++·算法
翀哥~1 小时前
告别(Python)if elif else错误使用方法
开发语言·python·if elif else
点云SLAM1 小时前
C++ 中二级指针的正确释放方法
开发语言·数据结构·c++·人工智能·算法
黄雪超1 小时前
JVM——Java对象的内存布局
java·开发语言·jvm