我对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卡时,那里什么都没有。
非常感谢任何帮助。感谢
答案 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();
然后将剩余的存储位置信息附加到其末尾。