使用 'adb backup' 以编程方式备份​​应用程序

Using 'adb backup' to backup application programmatically

目前,我正在使用 adb backup 命令对我的应用程序进行备份,我的设备通过微型 USB 数据线连接到我的电脑。该命令如下所示:

adb backup -f Backups/app.ab -noapk com.me.app

在我的备份文件夹中输出和 android 名为 app.ab 的备份 (ab) 文件。

我想知道是否可以通过编程方式将应用程序备份到 SD 卡?我只需要定期备份应用程序及其数据库。

关于此问题的任何 links/docs 都会有所帮助。

谢谢, 马特

您不能从您的应用程序 运行 ADB 命令(如 backup),但您可以 运行 SHELL 命令(LINUXSHELL 内部命令 运行),像这样 -

Process process = Runtime.getRuntime().exec("my_command");  

如果您知道您的目标文件夹和目标文件夹,您可以使用cp命令来复制文件。 如果您想阅读命令的结果,请使用

BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));

确保您的应用具有写入 SD 的适当权限。

阅读 adb 的源代码后(来源:https://github.com/aosp-mirror/platform_system_core/blob/master/adb/daemon/services.cpp)。

我发现

/system/bin/bu 备份包名

/system/bin/bu 恢复 < filename.ab

是shell命令,可以运行备份和恢复。

不幸的是,这对我没有 root 访问权限的设备不起作用

只有以下代码适用于 root 设备:

try {
    Process su = Runtime.getRuntime().exec("su");
    DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

    outputStream.writeBytes("/system/bin/bu backup all\n");
    outputStream.flush();

    outputStream.writeBytes("exit\n");
    outputStream.flush();
    su.waitFor();
} catch(Exception e) {}