使用 '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
命令(LINUX
从 SHELL
内部命令 运行),像这样 -
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) {}
目前,我正在使用 adb backup
命令对我的应用程序进行备份,我的设备通过微型 USB 数据线连接到我的电脑。该命令如下所示:
adb backup -f Backups/app.ab -noapk com.me.app
在我的备份文件夹中输出和 android 名为 app.ab 的备份 (ab) 文件。
我想知道是否可以通过编程方式将应用程序备份到 SD 卡?我只需要定期备份应用程序及其数据库。
关于此问题的任何 links/docs 都会有所帮助。
谢谢, 马特
您不能从您的应用程序 运行 ADB
命令(如 backup
),但您可以 运行 SHELL
命令(LINUX
从 SHELL
内部命令 运行),像这样 -
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) {}