最近打算搞一个app备份与恢复的小应用,顾名思义,必然包括app的备份和app的恢复两部分。备份部分由可以分为apk的备份与data的备份两部分。需要注意的是备份与恢复都需要一堆的权限,尤其是恢复的时候。
app的备份
首先看看下面几个目录:
system/app 系统自带的应用程序apk目录,无法删除。data/app 用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录。
data/data 存放应用程序的数据。
data/dalvik-cache 将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)。
app的备份原理就是把system/app、data/app、data/data中的apk和数据存起来,可以存到sd卡也可以上传到网络。既然如此我们就可写代码了,下面代码只是我自己写来测试用的,不严谨,拷贝可能有问题。
apk的备份
public String backupAppPackage(String packageInPath, String packageName){
FileInputStream fis = null;
FileOutputStream fos = null;
try
{
File in = new File(packageInPath);
File out = new File(backupPath + packageName + ".apk");
out.createNewFile();
fis = new FileInputStream(in);
fos = new FileOutputStream(out);
int count;
byte[] buffer = new byte[256 * 1024];
while ((count = fis.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
}
catch (IOException e)
{
e.printStackTrace();
return "IOException";
}
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (fos != null)