【问题标题】:Backup /data/system/xxxx.bin to /sdcard备份 /data/system/xxxx.bin 到 /sdcard
【发布时间】:2011-11-20 15:38:36
【问题描述】:

我对 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,它只是坐在那里无所事事。当我检查我的 sdcard 时,那里什么都没有。

任何帮助将不胜感激。谢谢

【问题讨论】:

  • 查看 logcat 输出。可能有“fileNotFoundException”。如果没有进一步测试,我认为您要复制的文件不存在或您要写入的文件尚未创建。
  • 它可能不会强制关闭,因为错误发生在 try 语句中并被捕获。为了更好地处理错误,使用catch (FileNotFoundException e) and catch(IOException e) 和那些东西而不是通用的catch (Exception e) 更容易。
  • 非常感谢您的回复。我会尝试一些进一步的测试。你碰巧知道我的问题的第一部分吗?将 /data/system/batterstats.bin 之类的文件(非 SQLlite)备份到 sdcard,甚至更好(对我来说:P)如何通过 apk 运行 shell 脚本命令?

标签: android file backup sd-card


【解决方案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 很棒,对于命令,只需谷歌如何执行 linux 命令,然后将它们放入sendShell

我不知道如何用 java 来做。不过,我个人认为使用 linux 命令要容易 10 倍。

请注意,像这样获取 sdcard 位置实际上很好:
Environment.getExternalStorageDirectory();

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

【讨论】:

  • 非常感谢。你为我节省了大量时间。是的,我发现 shell 脚本也比 java 简单一百万倍。我昨天在看root工具,但是不知道sendShell命令!它有效:D
  • 不客气。当我发现 roottools 时,我既惊讶又高兴。 jar 文件包含索引命令的 HTML 文件。文档适中,但 Wiki 也有一些有用的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多