将/data/system/xxxx.bin备份到/ sdcard

时间:2011-11-20 15:38:36

标签: android file backup sd-card

我对apk开发很新。到目前为止,在购买书籍并使用大量谷歌搜索后,我设法创建了一个控制我自定义ROM的某些功能的应用程序。我目前正在尝试实现2个备份功能。我想将/data/system/batterystats.bin备份到/ sdcard,我还要将touchwiz启动器的launcher.db备份到/ sdcard。

对于第一部分,我实际上没有找到任何东西。我已经搜索了很多关于如何恢复文件的信息,但没有多少出现。它主要是关于SQL .db文件。我也寻找通过apk运行shell脚本来执行此备份的可能性。使用shell脚本很容易,但是通过.java这样做,老实说我没有任何线索。

另外,我已经尝试了很多代码来让我的sqlite数据库文件进行备份,但我还是不成功。这是我的代码供您查看:

public class Backup extends Activity {
public void exportDB(){
    try {
        File sd = Environment.getExternalStorageDirectory();
        if (sd.canWrite()) {
            String currentDBPath = "data/data/com.sec.android.app.twlauncher/databases/launcher.db";
            String backupDBPath = sd + "/launcher.db";
            File currentDB = new File(currentDBPath);
            File backupDB = new File(backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

我已经添加了外部存储写入的权限,当然在androidmanifest中,但没有任何反应。没有FC,只是坐在那里什么都不做。当我检查我的SD卡时,那里什么都没有。

非常感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:1)

下载RootTools(jar文件)。

然后你可以运行这样的linux命令:

RootTools.sendShell(command);

例如,要进行备份,您可以这样做:

RootTools.sendShell("cp -f /data/data/com.sec.android.app.twlauncher/databases/launcher.db /sdcard/directory/");

要恢复文件:

RootTools.sendShell("cp -f /sdcard/directory/launcher.db /data/data/com.sec.android.app.twlauncher/databases/");

cp是复制命令,-f是允许它覆盖文件的内容(如果文件已经存在)。

RootTools很棒,对于命令,只需google如何执行linux命令然后将它们放入sendShell

我不知道如何用java做到这一点。我个人认为使用linux命令要容易10倍。

值得注意的是,获得SD卡位置实际上很不错:
Environment.getExternalStorageDirectory();

然后将剩余的存储位置信息附加到其末尾。