Java 使用';亚洲开发银行备份';以编程方式备份应用程序

Java 使用';亚洲开发银行备份';以编程方式备份应用程序,java,android,sqlite,adb,Java,Android,Sqlite,Adb,目前,我正在使用adb backup命令对我的应用程序进行备份,我的设备通过微型usb电缆连接到我的电脑。该命令如下所示: adb backup -f Backups/app.ab -noapk com.me.app 它在我的备份文件夹中输出名为app.ab的android备份(ab)文件 我想知道是否有可能以编程方式将应用程序备份到SD卡?我只需要定期备份应用程序及其数据库 有关此问题的任何链接/文档都会有所帮助 谢谢, Matt您不能从应用程序运行ADB命令(如备份),但您可以运行SHEL

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

adb backup -f Backups/app.ab -noapk com.me.app
它在我的备份文件夹中输出名为app.ab的android备份(ab)文件

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

有关此问题的任何链接/文档都会有所帮助

谢谢,
Matt

您不能从应用程序运行
ADB
命令(如
备份
),但您可以运行
SHELL
命令(从
SHELL
内部运行的
LINUX
命令),如下-

Process process = Runtime.getRuntime().exec("my_command");  
如果知道目标文件夹和目标文件夹,可以使用
cp
命令复制文件。 如果要读取命令的结果,请使用

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

在读取adb的源代码(源代码:)后,确保您的应用程序具有写入
SD

的正确权限

我发现

/system/bin/bu备份包名称

/system/bin/bu restore

是可以运行以进行备份和恢复的shell命令

不幸的是,在没有根访问权限的情况下,这对我的设备不起作用

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

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) {}